2010-02-19 1 views
3

Я использую MiniDumpWriteDump для генерации файлов дампа при сбое. Я пытался сделать полный сброс памяти. Кажется, что это работает, и генерирует большой файл, как ожидалось.C++ MiniDumpWriteDump - FullMemoryDump не дает мне много информации

Однако, когда я загружаю этот огромный файл в Visual Studio (2005), я, похоже, не вижу значений любых переменных в куче. Фактически это дает мне больше информации, чем обычный сброс ...

Мой вызов MiniDumpWriteDump выглядит следующим образом:

MINIDUMP_EXCEPTION_INFORMATION mdi; 

mdi.ThreadId = GetCurrentThreadId(); 
mdi.ExceptionPointers = in_pInfo; 
mdi.ClientPointers = FALSE; 

MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(), 
    fHan, 
    MiniDumpWithFullMemory, 
    &mdi, 
    0, 
    0); 

Примечание: У меня есть полный набор PDB-х годов, действительный стек, и в моем тестовом приложении я притворялся ошибку с делением на ноль.

Любая идея, почему это так?

Приветствие Rich

+0

Вы пытались использовать WinDbg? Он работает там? – Andy

+0

Есть ли что-нибудь из этого? –

ответ

2

Вероятно потому, что вы не имеете правильные .pdb файлов. Или потому, что ваш код был переведен через версию RSA-шифрования оптимизатора. Или потому, что у вас есть сборка x64, где указатели передаются в регистры. Или из-за того, что ваш код разбился из-за повреждения кучи, что делает информацию отладки одинаково ненадежной. Или вытащить стопку сбоя, не оставляя хлебных крошек для отслеживания.

Возьмите с собой.

+0

ну, я тестирую приложение, поэтому я подделал разрыв на ноль. Стек не поврежден, все pdb загружены и правильны. Однако я не вижу значений каких-либо кучи или глобальных переменных. – Rich

+1

Обновите свой вопрос с такой важной информацией. Не сказать, что это впереди, это просто пустая трата времени каждого. Вам также нужно будет документировать, какие именно флаги MiniDumpWriteDump() вы использовали, и что означает «не видно». –

+0

вопрос был обновлен. – Rich