Справочная информация. Я использую 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?
Спасибо за любые идеи, которые вы можете предоставить!