Pergunta

Eu gosto de depurar no Matlab usando comandos. algumas perguntas:

  1. Se escolher uma pilha, é possível pular para uma pilha específica diretamente em vez de mover uma pilha após a outra usando DBUP e DBdown?
  2. Depois de pular para uma pilha do meio, se eu executar alguns comandos, por que ela retorna automaticamente à pilha mais interna? Posso ficar na pilha do meio até emitir um comando para sair para outra pilha?
Foi útil?

Solução

1) Não do teclado. Se você estiver usando o editor e exibir a barra de ferramentas do Editor, há um menu suspenso "Stack" que mostra a pilha de chamadas inteira e você pode pular para um nível arbitrário. Você pode invadir um DBup/DBdown de nível n, olhando o que está nesse suspensão, mas o controle do depurador é muito difícil de script do MATLAB devido à interação do depurador e ao código M que você está usando para scripts .

2) Se você emitir um comando do prompt de depurador "K >>", quando terminar, deverá devolver o nível da pilha de onde você o emitiu, como você espera. Você ainda tem o ponto de interrupção definido no nível inferior do código? Talvez você esteja realmente vendo um prompt de depurador secundário "K >>" de um ponto de interrupção na pilha de chamadas aninhadas. Você pode essencialmente ter vários contextos de depuradores aninhados.

Por exemplo:

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

Se você jogá -lo no depurador como este, você atingirá o ponto de interrupção na parte inferior de uma pilha de chamadas, que foi lançada na sessão de depurador original.

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

Fazer um dbquit (sair da sessão de depurador aninhado) leva você de volta ao meio da pilha de chamadas original de onde você parou.

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

Se você sair do seu "k >>", o fluxo de controle será retomado da parte inferior da pilha de chamadas, onde o ponto de interrupção foi originalmente aumentado, independentemente do quadro da pilha que o K >> está olhando. Você não pode usar o depurador para alterar o fluxo de controle do código principal que está sendo executado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top