Немного больше информации:
Я хотел создать файл MiniDump с помощью MiniDumpWriteDump но исключая определенный диапазон воспоминаний, которые я выделил в модулях. Этот диапазон памяти не важен для отладки, и он довольно большой (в основном текстуры).
Я прочитал документацию по MiniDumpCallback функции и изучил информацию, предоставленную вход а также Выход состав. Вход MiniDumpCallback позволяет мне только решить, включать ли диапазон памяти для исполняемых образов, а вывод MiniDumpCallback позволяет мне определить диапазон записи для файла дампа.
Следовательно, мне интересно, возможно ли создать MiniDump, исключая диапазон памяти, который был выделен для некоторых переменных, которые превысили ограничение размера.
Операционная система выделяет память в страницах (обычно 4 КБ), и будет возможно исключить только целую страницу. Переменная может начинаться в середине страницы и заканчиваться в середине страницы. Другие переменные могут быть выделены до и после него. Таким образом, вы не можете исключить память на переменной основе.
Если переменная больше, чем страница, и она охватывает всю страницу, возможно, можно исключить полные страницы. Тем не менее, это будет некоторая работа для вашей процедуры обратного вызова:
Позвольте мне предположить, что очень маловероятно иметь структуру такого большого размера. Таким образом, единственной возможной переменной с таким размером будут массивы. Вы можете написать метод, который распределяет массивы и отслеживает массивы, охватывающие всю страницу. Во время обратного вызова вы можете определить начало и конец страницы, используя GetSystemInfo () а затем исключить страницы.
Несмотря на усилия по реализации этого, рассмотрим:
.dump
еще раз) и сначала проанализируем это. Только при необходимости клиент должен отправить вам файл большего размера.-mp
переключатель). (Но учтите, что ProcDump не вступит в игру, если у вас есть собственный обработчик необработанных исключений)Других решений пока нет …