Как создать минидамп со стековой памятью
Моя программа создает мини-дамп при сбое (используя MiniDumpWriteDump из DBGHELP.DLL), и я хотел бы, чтобы размер дампа был как можно ниже, но при этом сохранялась важная информация о памяти. Я рассмотрел различные возможные комбинации флагов и функций обратного вызова, которые вы можете передать MiniDumpWriteDump (ссылки на debuginfo.com или MSDN).
Я думаю, что я ограничен этими флагами MINIDUMP_TYPE, так как он должен работать на старой машине WinXP:
- MiniDumpNormal
- MiniDumpWithDataSegs
- MiniDumpWithFullMemory
- MiniDumpWithHandleData
- MiniDumpFilterMemory
- MiniDumpScanMemory
Я ищу способ объединить эти флаги и функцию обратного вызова, чтобы получить дамп со следующими требованиями:
- Относительно небольшой размер (полный дамп памяти приводит к размеру файла ~200 МБ, я хочу максимум 20 МБ)
- Трассировка стека потерянного потока, может быть также трассировка стека других потоков, но без информации о памяти
- Информация о памяти всего стека потерянного потока. Вот где это становится сложным: включение стековой памяти не должно быть проблемой с точки зрения размера, но куча памяти может быть излишней.
Вопрос в том, как я могу ограничить информацию о памяти потерянным потоком и как включить память стека (локальные переменные) всего стека вызовов? Можно ли также включить части памяти кучи, как только те части, на которые ссылается текущий стек вызовов?