Question

Je tiens à déboguer à l'aide des commandes Matlab. quelques questions:

  1. Si choisir une pile, il est possible de sauter à une pile spécifique directement au lieu de déplacer une pile après l'autre en utilisant dbup et dbdown?
  2. Après avoir sauté à une pile du milieu, si j'exécuter des commandes, pourquoi il retourne auto à l'intérieur le plus pile? Puis-je rester à la pile du milieu jusqu'à ce que j'envoie une commande de quitter pour une autre pile?
Était-ce utile?

La solution

1) Pas du clavier. Si vous utilisez l'éditeur et ont la barre d'outils Editeur affiché, il y a un menu déroulant « Stack » qui vous montre l'ensemble de la pile d'appel, et vous pouvez passer à un niveau arbitraire. Vous pourriez être en mesure de pirater un n niveau dbup / dbdown ensemble en regardant ce qui est dans ce menu déroulant, mais le contrôle du débogueur est très difficile de script Matlab en raison de l'interaction du débogueur et le code M-que vous utilisez pour les scripts .

2) Si vous exécutez une commande de la « K >> » invite du débogueur, quand il se termine, il devrait vous retourner le niveau de pile vous avez émis à partir, comme vous vous attendez. Avez-vous encore le point d'arrêt défini au niveau inférieur du code? Peut-être que vous voyez en fait un débogueur secondaire « K >> » rapide à partir d'un point d'arrêt dans la pile d'appels imbriqués. Vous pouvez essentiellement avoir plusieurs contextes de débogage imbriqués.

Par exemple:

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

Si vous jetez dans le débogueur comme celui-ci, vous tomberez sur le point d'arrêt au bas d'une pile d'appel qui lui-même a été lancé à partir de la session de débogage d'origine.

>> 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>> 

Faire un dbquit (sortir de la session de débogage imbriqué) vous permet de revenir au milieu de la pile d'appel original où vous l'avez laissé.

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

Si vous dbcont de votre « K >> », puis contrôler le flux reprendra à partir du bas de la pile d'appel, où le point d'arrêt a été soulevée à l'origine, peu importe ce que la pile cadre du K >> regarde. Vous ne pouvez pas utiliser le débogueur pour modifier le flux de contrôle du code réseau principal en cours d'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top