Фон: Я використовую windbg для діагностування причин, пов'язаних із мінімальними від сервісу Microsoft WinQual. Я "зайняв час, щоб налаштувати все належним чином з PDB та бінарними файлами в тому самому місці шляху, як і коли вони були побудовані, і мені дуже вдало з windbg і цим налаштуванням.
Сьогодні я зіткнувся з мінідумом, де мені дуже хотілося б роздивитися розбирання, щоб зрозуміти проблему, але windbg поверне лише частину функції.
Моя функція виглядає так:
SomeStruct* STDCALL getThing(int id)
{
S_ASSERT(a);
S_ASSERT(b);
S_ASSERT(c);
SomeStruct* result = fn(id);
S_ASSERT(d);
return result;
}
S_ASSERT
це наш макрос, який врешті-решт викликає функцію, де int 3
інструкція потрапляє навіть у версії версій. Я просто не можу сказати, в кого потрапив, не перевіряючи демонтаж.
За допомогою windbg я можу перейти до getThing
в стеку викликів активуйте демонтаж і побачите якийсь код, але не можу прокрутити назад у розборці. Потім я додав годинник на module!getThing
щоб отримати адресу функції, і написав цеадресу у вікні розбирання. Замість інструкцій я отримую ~ 100 рядків ??? після чого слід розібрати, який не схожий на точку входу функції, але виглядає як частина правильної функції. Це виглядає приблизно так:
No prior disassembly possible
module!getThing:
1d7d4aa0 ?? ???
1d7d4aa1 ?? ???
1d7d4aa2 ?? ???
...
1d7d4b0a 087d1c or byte ptr [ebp+1Ch],bh
1d7d4b0d 8b4004 mov eax,dword ptr [eax+4]
1d7d4b10 8bf9 mov edi,ecx
1d7d4b12 83e11f and ecx,1Fh
1d7d4b15 bb01000000 mov ebx,1
...
Отже, як я можу переконати windbg показати решту розбирання? По черзі, чи я неправильно трактую результати? Чи є якесь інше програмне забезпечення, здатне завантажувати міні-відбитки окрім Visual Studio?
Дякую за будь-яке розуміння, яке ви можете надати!
Відповіді:
2 для відповіді № 1Переконайтеся, що у вас є копія той же dll або exe у шляху символу (.sympath
) або exe шлях (.exepath
). Використовуйте !sym noisy
і .reload
і переконайтеся, що windbg знаходить цей dll.