2013-07-29 5 views
0

Я построил test.exe, который будет разбивать и генерировать файл .dmp с помощью MinidumpWriteDump, а parser.exe используется для чтения и печати информации из этого файла dmp.меньше стеков с помощью StackWalk64

В файле parser.exe Я использую StackWalk64 для получения всех стековых следов всех потоков в этом файле dmp. Но теперь я обнаружил, что я могу получить меньше стеков, чем это сделала визуальная студия.

Я пробовал все решения, которые я мог найти в google, stackoverflow, codeproject, ничего не изменилось.

Следующая что parser.exe сделать:

  1. SymInitialize
  2. MiniDumpReadDumpStream прочитать всю информацию,
  3. SymLoadModuleEx & SymFindFileInPath загрузить PDB/EXE/DLL, указанные в файле .dmp
  4. Initialize STACKFRAME64 и вызовите StackWalk64 в цикле.

Я хочу знать, как получить то же количество стека, что и визуальная студия. При необходимости я мог бы вставить здесь больше кода. Любая помощь будет оценена по достоинству.

ответ

1

StackWalk64 не достаточно устойчив, чтобы следить за полной трассировкой стека, особенно с помощью оптимизированных фреймов. (Например, см. Этот вопрос о потоковом потоке here).

Наилучший подход - фактически использовать отладочный двигатель, поставляемый с WinDbg. Вот несколько сообщений в блоге, которые показывают, как использовать API отладки двигателя:

+0

Спасибо, полезные советы. –