/ / Чому windbg не розбере половину моєї функції? - windbg, розбирання

Чому б не розібрати половину моєї функції? - windbg, розбирання

Фон: Я використовую 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.