Pergunta

Eu corri kd por engano e tenho alguma saída que me inteerested, uma referência a uma linha de código no meu módulo que eu não posso ver na pilha de chamadas de qualquer segmento. As linhas não eram o beginnning do método, então eu não acho que a referência é a um ponteiro de função, mas possivelmente o resultado de uma exceção que está sendo armazenado na memória ??? Claro, que passa a ser o que eu estou procurando ...

Update:

O rastreamento de pilha de exceção é:

0:000> kb
   *** Stack trace for last set context - .thread/.cxr resets it
ChildEBP RetAddr  Args to Child              
0174f168 734ea84f 2cb9e950 00000000 2cb9e950 kernel32!LoadTimeZoneInformation+0x2b
0174f1c4 734ead92 00000022 00000001 000685d0 msvbvm60!    RUN_INSTMGR::ExecuteInitTerm+0x178
0174f1f8 734ea9ee 00000000 0000002f 2dbc2abc msvbvm60!    RUN_INSTMGR::CreateObjInstanceWithParts+0x1e4
0174f278 7350414e 2cb9e96c 00000000 0174f2f0 msvbvm60!    RUN_INSTMGR::CreateObjInstance+0x14d
0174f2e4 734fa071 00000000 2cb9e96c 0174f2fc msvbvm60!RcmConstructObjectInstance+0x75
0174f31c 00976ef1 2cb9e950 00591bc0 0174fddc msvbvm60!__vbaNew+0x21

e em nosso código (criar uma nova classe derivada Form)

a saída dds:

0:000> dds esp-0x40 esp+0x100
0174f05c  00000000
0174f060  00000000
0174f064  00000000
0174f068  00000000
0174f06c  00000000
0174f070  00000000
0174f074  00000000
0174f078  00000000
0174f07c  00000000
0174f080  00000000
0174f084  00000000
0174f088  00000000
0174f08c  00000000
0174f090  00000000
0174f094  00000000
0174f098  00000000
0174f09c  007f4f9b ourDll!formDerivedClass::Form_Initialize+0x10b [C:\Buildbox\formDerivedClass.frm @ 1452]

etc

o que parece indicar que a inicialização está sendo chamado, mesmo que não está no rastreamento de pilha ou esta exceção ou qualquer um dos tópicos. Como sugerido, tudo isso poderia ser uma incompatibilidade entre pdbs e DLLs, mas parece uma coincidência que nós acabar nas classes e métodos adequados

Foi útil?

Solução

Kd significa "despejo de pilha." A partir da documentação:

O comando kd exibe a pilha crua dados. Cada valor DWORD é exibido uma linha separada. informações símbolo é exibida por estas linhas juntas com símbolos associados. este formato cria uma lista mais detalhada do que a outros comandos k *. O comando kd é equivalente a um dds (Apresentação de Memória) comando que usa o endereço de pilha como seu parâmetro.

Tente .hh para obter a ajuda depurador de dentro ntsd / windbg.

Consulte também "dds esp-0x40 esp + 0x80"

Outras dicas

Desculpe-me, mas parece um bocado como você realmente executou o comando "kb" - com um "B", não um "D". Isso é o que aparece na sessão anterior, e os exemplos sobre http://www.debuginfo.com/ artigos / easywindbg.html certamente parecem produzir saída semelhante ...

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