Что делает команда windbg "kd"? - PullRequest
1 голос
/ 06 мая 2009

Я запустил kd по ошибке и получил какой-то вывод, который меня заинтересовал, ссылку на строку кода в моем модуле, которую я не вижу в стеке вызовов какого-либо потока. Строки не были началом метода, так что я не думаю, что ссылка на указатель на функцию, но, возможно, результат исключения, хранящегося в памяти ??? Конечно, это то, что я ищу ...

Обновление:

Трассировка стека исключения:

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

и в наш код (создайте новый производный класс Form)

вывод ддс:

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]

и т.д.

, который, кажется, указывает на то, что Initialize вызывается, даже если он не находится в трассировке стека ни этого исключения, ни какого-либо из потоков. Как и предполагалось, это может быть несоответствие между pdbs и dll, но кажется совпадением, что мы в конечном итоге выбрали правильные классы и методы

Ответы [ 2 ]

1 голос
/ 06 мая 2009

Kd означает «сброс стека». Из документации:

Команда kd отображает необработанный стек данные. Каждое значение DWORD отображается на отдельной строкой. Символ информации отображаются для этих строк вместе со связанными символами. Этот формат создает более подробный список, чем другие команды k *. Команда kd эквивалент ддс (дисплей памяти) команда, которая использует адрес стека как его параметр.

Попробуйте .hh, чтобы получить помощь отладчика внутри ntsd / windbg.

Смотрите также "dds esp-0x40 esp + 0x80"

0 голосов
/ 20 марта 2010

Извините, но похоже, что вы действительно выполнили команду "kb" - с буквой "B", а не "D". Это то, что появляется в предыдущем сеансе, и примеры на http://www.debuginfo.com/articles/easywindbg.html, безусловно, дают аналогичные результаты ...

...