Question

J’ai couru par kd par erreur et j’ai eu une sortie qui m’intéressait, une référence à une ligne de code dans mon module que je ne peux pas voir sur la pile d’appel d’un thread. Les lignes n'étaient pas le début de la méthode, donc je ne pense pas que la référence soit à un pointeur de fonction, mais peut-être au résultat d'une exception stockée dans la mémoire ??? Bien sûr, c’est ce que je cherche ...

Mise à jour:

La trace de la pile de l'exception est:

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

et dans notre code (créer une nouvelle classe dérivée de formulaire)

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

qui semble indiquer qu'Initialize est appelée même si elle ne figure pas dans la trace de pile de cette exception ni de l'un des threads. Comme suggéré, cela pourrait être une discordance entre pdbs et dlls, mais cela semble être une coïncidence de nous retrouver dans les bonnes classes et méthodes

Était-ce utile?

La solution

Kd signifie "pile dump". De la documentation:

  

La commande kd affiche la pile brute   Les données. Chaque valeur DWORD est affichée sur   une ligne séparée. Les informations de symbole sont   affiché pour ces lignes ensemble   avec des symboles associés. Ce format   crée une liste plus détaillée que la   autres commandes k *. La commande kd est   équivalent à un dds (Display Memory)   commande qui utilise l'adresse de la pile comme   son paramètre.

Essayez .hh pour obtenir l’aide du débogueur depuis ntsd / windbg.

Voir aussi "dds esp-0x40 esp + 0x80"

Autres conseils

Excusez-moi, mais on dirait que vous avez exécuté le "kb". commande - avec un "B", pas un "D". C’est ce qui apparaît dans la session ci-dessus et dans les exemples de http://www.debuginfo.com/. articles / easywindbg.html semblent produire des résultats similaires ...

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