Как создать минидамп со стековой памятью

Моя программа создает мини-дамп при сбое (используя MiniDumpWriteDump из DBGHELP.DLL), и я хотел бы, чтобы размер дампа был как можно ниже, но при этом сохранялась важная информация о памяти. Я рассмотрел различные возможные комбинации флагов и функций обратного вызова, которые вы можете передать MiniDumpWriteDump (ссылки на debuginfo.com или MSDN).

Я думаю, что я ограничен этими флагами MINIDUMP_TYPE, так как он должен работать на старой машине WinXP:

  • MiniDumpNormal
  • MiniDumpWithDataSegs
  • MiniDumpWithFullMemory
  • MiniDumpWithHandleData
  • MiniDumpFilterMemory
  • MiniDumpScanMemory

Я ищу способ объединить эти флаги и функцию обратного вызова, чтобы получить дамп со следующими требованиями:

  • Относительно небольшой размер (полный дамп памяти приводит к размеру файла ~200 МБ, я хочу максимум 20 МБ)
  • Трассировка стека потерянного потока, может быть также трассировка стека других потоков, но без информации о памяти
  • Информация о памяти всего стека потерянного потока. Вот где это становится сложным: включение стековой памяти не должно быть проблемой с точки зрения размера, но куча памяти может быть излишней.

Вопрос в том, как я могу ограничить информацию о памяти потерянным потоком и как включить память стека (локальные переменные) всего стека вызовов? Можно ли также включить части памяти кучи, как только те части, на которые ссылается текущий стек вызовов?

0 ответов

Другие вопросы по тегам