Como posso visualizar a pilha de chamadas de um processo / thread em execução?

14

Alguém me pediu para obter uma pilha de chamadas ou um rastreamento de pilha de um processo em execução para que ele pudesse analisá-lo para mim.

Como posso obter essa informação?

Der Hochstapler
fonte

Respostas:

35
  1. Obtenha o Process Explorer .

  2. Ative Mostrar detalhes de todos os processos no menu Arquivo :

    insira a descrição da imagem aqui

  3. No painel principal, selecione o processo em que você está interessado:

    insira a descrição da imagem aqui

  4. Abra o menu de contexto (clique com o botão direito do mouse) para o processo selecionado e clique em Propriedades :

    insira a descrição da imagem aqui

  5. Na guia Threads , você poderá ver uma lista dos threads em execução dentro desse processo:

    insira a descrição da imagem aqui

  6. Selecione o tópico em que você está interessado e clique no botão Empilhar :

    insira a descrição da imagem aqui

  7. O Process Explorer agora exibirá a pilha de chamadas atual para o encadeamento selecionado:

    insira a descrição da imagem aqui

Símbolos

Se a sua solução de problemas exigir mais detalhes, geralmente é muito útil carregar símbolos de depuração no Process Explorer. É assim:

  1. Se você ainda não possui um depurador do Windows instalado, será necessário instalar primeiro as Ferramentas de Depuração para Windows .

  2. No Process Explorer, abra Configurar símbolos ... no menu Opções :

    insira a descrição da imagem aqui

  3. Se você tiver as Ferramentas de Depuração (ou outro depurador do Windows) instaladas, o Process Explorer encontrará automaticamente o dbghelp.dllarquivo. Caso contrário, defina o caminho correto aqui.

    insira a descrição da imagem aqui

    O caminho dos símbolos deve se parecer com:

    SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
    

    A única parte que você deseja ajustar é C:\Symbols. É nesse local que os símbolos de depuração serão armazenados em cache.

Der Hochstapler
fonte
existe uma maneira de despejar todas as pilhas de chamadas de threads em arquivo?
bgura