Frage

Ich mag zu debuggen in Matlab-Befehle. einige Fragen:

  1. Wenn wählen einen Stapel ist es möglich, direkt zu einem bestimmten Stapel zu springen, anstatt Bewegen eines Stapels nach dem anderen mit dbup und dbdown?
  2. Nach einem Mittelstapel springen, wenn ich einige Befehle ausführen, warum es automatisch wieder in den innersten Stack? Kann ich in der Mitte Stapel bleiben, bis ich einen Befehl für einen anderen Stapel zu lassen?
War es hilfreich?

Lösung

1) nicht von der Tastatur. Wenn Sie den Editor verwendet werden soll und die Editor-Symbolleiste angezeigt wird, gibt es einen „Stack“ Drop-Down-das zeigt Ihnen die gesamte Call-Stack, und Sie auf einen beliebigen Level springen kann. Sie könnten in der Lage, eine n-Ebene zu hacken dbup / dbdown zusammen, indem ich suchen, was in diesem Drop-down, aber Debugger Steuerung ist sehr schwer zu Skript von Matlab aufgrund der Wechselwirkung des Debuggers und der M-Code, den Sie für Scripting sind .

2) Wenn Sie einen Befehl aus dem „K >>“ ausgeben Debugger Aufforderung, wenn es fertig ist es sollten Sie die der Stack-Ebene zurückkehren Sie es von ausgegeben, wie Sie es erwarten. Haben Sie noch den Haltepunkt auf der untersten Ebene des Codes festgelegt? Vielleicht sind Sie tatsächlich einen sekundären Debugger „K >>“ prompt von einem Haltepunkt in dem verschachtelten Call-Stack zu sehen. Sie können im Wesentlichen mehr verschachtelten Debugger Kontexte haben.

Zum Beispiel:

function f1
f2();
function f2()
f3();
function f3()
f4();
function f4()
disp('Hello world');

Wenn Sie es im Debugger wie diese werfen, werden Sie den Haltepunkt an der Unterseite eines Call-Stack getroffen, die sich von der ursprünglichen Debugger-Sitzung gestartet wurden.

>> dbstop in f1 at 8
>> f1()
8   disp('Hello world');
K>> dbup
In workspace belonging to f1>f3 at 6
K>> dbup
In workspace belonging to f1>f2 at 4
K>> f1()
8   disp('Hello world');
K>> dbstack
> In f1>f4 at 8
  In f1>f3 at 6
  In f1>f2 at 4
  In f1 at 2
  In f1>f4 at 8
  In f1>f3 at 6
  In f1>f2 at 4
  In f1 at 2
K>> 

Doing a dbquit (raus aus der verschachtelten Debugger-Sitzung) bekommt man zurück in die Mitte des ursprünglichen Call-Stack, wo Sie aufgehört haben.

K>> dbquit
K>> dbstack
  In f1>f4 at 8
  In f1>f3 at 6
> In f1>f2 at 4
  In f1 at 2
K>> 

Wenn Sie dbcont aus Ihrem „K >>“, dann Steuerfluss wird von der Unterseite des Call-Stack wieder aufnehmen, wo der Haltepunkt ursprünglich erhoben wurde, unabhängig davon, was Stapel der K Rahmen >> betrachtet. Sie können nicht den Debugger verwenden, um den Steuerfluss des Fern Code ändern ausgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top