Что такое дамп exe файла
В первый раз, когда я столкнулся с проблемой сбоя программы, я разработал программу-плагин для устройства раньше, и на этом компьютере не было проблем, но сгенерированный исполняемый файл был скопирован на сервер, и программа была запущена. Сразу после ввода кода плагина служба плагина Он разбился. В то время эта проблема меня огорчила. С помощью моих коллег я узнал, что самый быстрый способ решить проблему сбоя программы - это создать файл дампа. Используйте инструмент отладки для отладки, создав файл дампа, чтобы восстановить состояние программы после сбоя. , Который может быстро находить и устранять проблемы. Файл дампа - это образ процесса в памяти. Состояние выполнения программы можно сохранить в файл дампа через отладчик. Файлы дампа используются разработчиками драйверов для отладки драйвера.Этот файл необходимо открывать с помощью специального программного обеспечения, такого как WinDbg и VS. Поскольку в первый раз, когда я столкнулся с подобной проблемой, я не имел ни малейшего представления, но мой коллега быстро обнаружил проблему с нулевым указателем через файл дампа. Придерживаясь принципа, что возникшая проблема не может быть проблемой во второй раз, дамп Описание значения, генерации, функции, анализа и расположения файла - это сводка сбоя программы.
Этот документ предназначен для разработчиков.
Анализ аварийного дампа памяти в WinDbg
Перед анализом memory dump необходимо выполнить некоторые настройки. Для работ с софтом понадобится пакет символов отладки Debugging Symbols, загруженный с учётом версии и разрядности системы.
Можно настроить извлечение утилитой символов из интернета, что безопасно, поскольку используется официальный ресурс компании Майкрософт.
Использование страниц No Binary, No Symbols или No Source Found
Если Visual Studio не может найти файлы, необходимые для отладки модуля в дампе, отображается соответствующая страница No Binary Found (Двоичные файлы не найдены), No Symbols Found (Символы не найдены) или No Source Found (Исходные файлы не найдены). На этих страницах содержатся подробные сведения о причине проблемы, а также ссылки на действия, которые могут помочь найти файлы. См. статью Указание файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio.
2.3.2 Автоматически создается при программировании
lpTopLevelExceptionFilter - это указатель на функцию обработки исключений. Если он имеет значение NULL, по умолчанию используется UnhandledExceptionFilter. Следовательно, мы можем настроить функцию обработки исключений для lpTopLevelExceptionFilter. Нам нужно создать дамп памяти. Это достигается с помощью функции MiniDumpWriteDump.
Следующий код представляет собой создание файла дампа с помощью функции MiniDumpWriteDump.
Собственный отладочный код, всплывающее окно, которое появляется при возникновении исключения, то есть UnhandledExceptionFilter создается обработчиком исключений по умолчанию. В это время вы можете щелкнуть прерывание или продолжить, и вы можете увидеть стек вызовов в соответствующем нижнем правом углу, что очень полезно для устранения неполадок и поиска Помогите.
Связанные ссылки
-
Официальные обновления и страница эрраты для окончательной книги на Windows внутренних, Марк Руссинович и Дэвид Соломон. . Официальное руководство по служебным программам Sysinternals Марком Руссиновичем и Аароном Маргозом, включая описания всех средств, их функции, способы их использования для устранения неполадок и примеры реальных вариантов их использования.
С критическими ошибками «оконной» ОС знаком практически каждый её пользователь, и появляющиеся при этом синие экраны смерти (BSoD) обычно ничего хорошего не предвещают. Они могут быть спровоцированы программными или аппаратными причинами, и поскольку источник неприятности не всегда очевиден, решение начинается с диагностических мероприятий.
Установка WinDbg в Windows
Утилита, являющаяся отладчиком для юзермодных приложений и драйверов, позволяет проанализировать снимок памяти и выяснить, что спровоцировало BSoD. Поставляется она в составе пакета SDK для Windows 10, инсталлятор скачивается на сайте Microsoft. Для Семёрки и ранних версий систем WinDbg можно найти в пакете Microsoft Windows SDK for Windows 7 and NET Framework 4.
2.3.1 Генерируется с помощью диспетчера задач
Этот метод может создать файл .DMP, открыв диспетчер задач, найдя процесс, соответствующий службе подключаемого модуля, щелкнув правой кнопкой мыши и выбрав создание файла дампа:
Место хранения файла .DMP показано ниже:
Сгенерированный файл дампа можно открыть с помощью VS, но обычная запущенная программа для создания файла .DMP не имеет большого эффекта. Вышеупомянутый метод необходимо использовать, когда программа дает сбой и не выходит напрямую. В общих сценариях программа дает сбой более грубо, поэтому вы можете использовать следующий метод для создания файла дампа.
2.3 Создание файла дампа
Когда программа запущена, неизбежны какие-то нештатные ситуации, особенно когда условие не позволяет отладчику зависать, очень важно, как быстро найти метод ошибки.
- очень важный метод поиска ошибок. Хороший журнал может помочь программистам быстро обнаружить проблему. Но журнала иногда бывает недостаточно:
Иногда журнал может найти только общий диапазон ошибок, но не может подтвердить проблему, например, программа обнаружила неизвестное исключение.
Нет возможности выйти из системы или невозможно получить информацию об ошибке, когда журнал доступен, например, при сбое программы.
Когда журнала явно недостаточно, DUMP-анализ соответствующих данных в процессе является более практичным и удобным методом. Многие приложения предоставляют этот тип функции, так что при возникновении проблемы с программой соответствующие данные могут быть отправлены разработчику, чтобы облегчить разработчику анализ проблемы. Такие приложения, как Office, будут иметь эту функцию. При сбое приложения появится диалоговое окно с запросом на отправку данных, связанных с ошибкой.
Поскольку файл дампа может сохранять внутреннюю память, стек, дескриптор, поток и другую информацию, относящуюся к работе программы, это очень важно. Поэтому понимание того, как создать файл дампа, поможет избежать затруднений. Один из способов запуска сцены.
Открытие файла дампа
В Visual Studio последовательно выберите Файл > Открыть > Файл.
В окне Сводка файла минидампа отображается сводка и сведения о модулях для файла дампа, а также действия, которые можно выполнить.
В разделе Действия:
- чтобы задать расположения для загрузки символов, выберите Set symbol paths (Задать пути к символам);
- чтобы начать отладку, выберите Debug with Managed Only (Отладка только с управляемым кодом), Debug with Native Only (Отладка только с машинным кодом), Debug with Mixed (Отладка со смешанным кодом) или Debug with Managed Memory (Отладка с управляемой памятью).
Настройка сервера отладочных символов
Отладочные символы, которые генерируются в процессе компиляции приложения вместе с исполняемым файлом, нужны при отладке. Настраиваем WinDbg на извлечение символов из сети:
Запись минидампа
Ниже приведены основные параметры для записи минидампа.
Не делать ничего. Windows автоматически создает малый дамп, когда программа создает необработанное исключение. автоматическое создание минидампа доступно с Windows XP. если пользователь допускает его, мини-дамп будет отправлен в корпорацию майкрософт, а не к разработчику с помощью отчеты об ошибках Windows (WER). разработчики могут получить доступ к этим мини-дампам с помощью программы Windows классических приложений.
Для использования WER требуется:
- Разработчики могут подписывать свои приложения с помощью Authenticode
- Приложения имеют допустимый ресурс VERSIONINFO в каждом исполняемом файле и библиотеке DLL
дополнительные сведения о принципах работы WER см. в разделе как работает отчеты об ошибках Windows. описание сведений о регистрации см. в статье введение отчеты об ошибках Windows в зону ISVMSDN.
используйте продукт из Microsoft Visual Studio Team System. В меню Отладка выберите команду сохранить дамп как , чтобы сохранить копию дампа. Использование локально сохраненного дампа является только параметром для внутреннего тестирования и отладки.
2.2 Роль файлов дампа
Файл дампа представляет собой образ процесса в памяти, и состояние выполнения программы может быть сохранено в файле дампа через отладчик. Он в основном используется для создания файла дампа при сбое или сбое в системе, а затем использовать отладчик для отладки, чтобы вы могли скопировать файл dmp в производственной среде на свою собственную машину разработки и отладить, чтобы найти место ошибки программы. .
На практике программирования на C ++ обычно встречаются распространенные проблемы C / C ++, такие как недопустимый доступ к памяти, недопустимые объекты, переполнение стека, вызовы нулевого указателя и т. д., и эти проблемы часто приводят к: сбою системы . Для решения проблемы сбоя одним из часто используемых методов является создание файла дампа для отладки кода, а другим - использование удаленного отладчика для отладки. Однако удаленный отладчик требует, чтобы исходный код программы и исполняемые файлы находились в одной локальной сети, что требует более высоких требований к среде. Следовательно, лучшим решением для сбоя программы является создание файла дампа для анализа, быстрого определения места сбоя программы и устранения проблемы. Во время этого сбоя подключаемого модуля произошел сбой двух строк кода:
Во время работы программы после того, как плагин напечатал «- CHikNetDevice :: SetSipConfig Starts», программа вылетела из строя, что можно распечатать через журнал. В нижней функции NETSDKPLUGIN_DEBUG соответствующий% s должен быть указателем на строку в стиле C. Но был передан объект типа C ++ std :: string, что привело к сбою программы.
Код сбоя после выглядит следующим образом:
Тело функции originalFmt.AssignFormat (cpOldStream) в синей строке в приведенном выше фрагменте кода
Использовалась функция pStream-> GetFormat (). Раньше, если звуковая карта была отключена или изображение ниже не было установлено на удаленном рабочем столе, pStream был нулевым указателем, а cpOldStream не оценивался как нулевой перед использованием, поэтому программа аварийно завершала работу, что приводило к Программа вылетела.
Пока Xingchen вставил управляющий код, созданный файлом дампа, в основную функцию при обнаружении проблемы, исключение нулевого указателя было быстро обнаружено.
Файлы дампа, с кучами или без куч
В файлах дампа могут содержаться сведения о куче, но могут и отсутствовать.
Файл дампа со сведениями о куче содержит снимок памяти приложения, включая значения переменных на момент создания дампа. Visual Studio также сохраняет в файле дампа с кучей двоичные файлы загруженных модулей машинного кода, что может значительно упростить отладку. Visual Studio может загружать символы из файла дампа с кучей, даже если не удается найти двоичный файл приложения.
Файлы дампа без сведений о куче намного меньше, чем дампы с кучами, но отладчику нужно будет загрузить двоичные файлы приложения, чтобы найти сведения о символах. Загруженные двоичные файлы должны точно соответствовать тем, которые выполнялись во время создания дампа. В файлах дампа без сведений о куче хранятся только значения переменных стека.
Анализ минидампа
Открытие минидампа для анализа — это так же просто, как создание такого дампа.
Анализ минидампа
- Запустите Visual Studio.
- В меню файл выберите команду открыть Project.
- Задайте файлы типа для дампа файлов, перейдите к файлу дампа, выберите его и нажмите кнопку Открыть.
- Запустите отладчик.
Отладчик создаст имитацию процесса. Имитация процесса будет остановлена в инструкции, вызвавшей сбой.
Введение
ProcDump — это служебная программа командной строки, основная цель которой — мониторинг приложения на наличие пиков ЦП и создание аварийных дампов во время пиков, которые администратор или разработчик может использовать для определения причины всплеска. ProcDump также включает мониторинг зависания окна (с использованием того же определения окна, что и использование Windows и диспетчера задач), необработанного мониторинга исключений и может создавать дампы на основе значений счетчиков производительности системы. Она также может служить служебной программой дампа общего процесса, которую можно внедрить в другие скрипты.
Поиск файлов EXE, PDB и исходных файлов
Для использования всех возможностей отладки в файле дампа Visual Studio требуются следующие файлы.
- EXE-файл, для которого был создан дамп, и другие двоичные файлы (DLL и т. п.), использовавшиеся процессом дампа.
- Файлы символов ( .pdb) для EXE-файлов и других двоичных файлов.
- EXE- и PDB-файлы, в точности соответствующие версии и сборке файлов, использовавшихся при создании дампа.
- Исходные файлы для соответствующих модулей. Если не удается найти исходные файлы, можно использовать дизассемблирование модулей.
Если в дампе содержатся данные кучи, Visual Studio может обойтись без двоичных файлов для некоторых модулей, но необходимы двоичные файлы для достаточного количества модулей, чтобы создавать допустимые стеки вызовов.
Для чего нужен дамп памяти Windows
Содержимое оперативной памяти и материалы, касающиеся сбоя, могут писаться в файл подкачки, при следующем старте операционки создаётся аварийный дамп с информацией об отладке, сформированной на базе сохранённых данных (ОС может создавать memory dump и минуя файл подкачки). В журнале событий будет сделана запись об ошибке, если данная опция настроена.
Вывод участка дампа 32-х битной ОС Windows с помощью программы Debug.exe
Тип записываемого дампа может задаваться в свойствах ОС, поддерживаются варианты:
- Малый дамп памяти. Включает немного сведений, в частности это код ошибки с параметрами, список установленных в Виндовс драйверов и т. д., но этой информации бывает достаточно для выявления источника проблемы. Элемент, как правило, будет записан в каталоге C:\Windows\Minidump.
- Дамп памяти ядра. Выполняется сохранение сведений оперативной памяти, связанных только с режимом ядра, исключая информацию, не указывающую на источник появления сбоя.
- Полный дамп системы. Содержимым является вся память операционки, что может создать проблемы при создании снимка, если объём ОЗУ составляет более 4Гб. Обычно пишется в файл C:\Windows\MEMORY.DMP.
- Автоматический дамп памяти (стал доступным с восьмой версии Виндовс). Содержит те же записи, что и memory dump ядра, при этом отличается способом управления системой размером файла подкачки.
- Активный дамп памяти (представлен в «Десятке»). Содержит только активную память хоста из режимов ядра и пользователя* (возможность была изначально реализована для серверов, чтобы при диагностике в дамп не попадали виртуальные машины).
*Дамп пользовательского режима представляет собой дамп определённого процесса. Так, содержимым может являться полная память процесса или фрагмент, список, стек, состояние потоков, списки библиотек, состояние потоков, дескрипторы объектов ядра.
ВАЖНО. При отказе диска или возникновении BSoD на первой стадии запуска системы аварийный дамп создан не будет.
Пути поиска для EXE-файлов
Visual Studio автоматически ищет EXE-файлы, не включенные в файл дампа, в следующих расположениях.
- В папке, содержащей файл дампа.
- В пути к модулю, указанному файлом дампа (это путь к модулю на компьютере, на котором был собран дамп).
- В путях к символам, указанных в разделе Инструменты (или Отладка) >Параметры >Отладка >Символы. Можно также открыть страницу Символы из панели Действия окна Сводка файла дампа. На этой странице можно добавить другие расположения для поиска.
Ассоциирование файлов .dmp с WinDbg
Для того чтобы объекты при нажатии на них открывались посредством утилиты:
-
В консоли командной строки, запущенной от имени администратора (например, через меню Пуск) выполняем команды (зависимо от разрядности ОС):
cd C:\Progran Files (x86)\Windows Kits\10\Debuggers\x64
exe –IA
cd C:\Progran Files (x86)\Windows Kits\10\Debuggers\x86
exe –IA
Теперь файлы типов .DMP, .HDMP, .MDMP, .KDMP, .WEW будут ассоциироваться с приложением.
Отладка минидампа с помощью WinDbg
для отладки минидампа можно также использовать WinDbg, отладчик, который входит в состав средств отладки Windows. WinDbg позволяет выполнять отладку без использования Visual Studio. сведения о загрузке средств отладки Windows см. в разделе Windows средства отладки в центре разработчиков Windows оборудования.
после установки Windows средств отладки необходимо ввести путь к символам в WinDbg.
Ввод пути к символам в WinDbg
В меню файл выберите пункт путь к символам.
В окне путь поиска символов введите следующее:
Использование ProcDump
Сбор данных об использовании:
Установка использования:
Удаление использования:
Если не указать имя файла дампа, по умолчанию используется _.dmp значение .
Используйте параметр командной -accepteula строки для автоматического принятия лицензионного соглашения Sysinternals.
Автоматическое завершение:
Задание события с именем ProcDump- аналогично вводу клавиш CTRL+C для корректного завершения ProcDump
Имени файла:
Имя файла дампа по умолчанию: PROCESSNAME_YYMMDD_HHMMSS.dmp
Поддерживаются следующие подстановки:
Подстановка | Объяснение |
---|---|
PROCESSNAME | Имя процесса |
ИД процесса | ИД процесса |
EXCEPTIONCODE | Код исключения |
ГГММДД | Year/Month/Day |
ЧЧММСС | Час,минута в секунду |
Требования и ограничения
- Для отладки файлов дампа, полученных с 64-разрядных компьютеров, необходимо запустить Visual Studio на 64-разрядном компьютере.
- Visual Studio поддерживает отладку файлов дампа управляемых приложений в Linux.
Visual Studio поддерживает отладку файлов дампа, создаваемых приложениями в машинных кодах на устройствах ARM. Он также поддерживает отладку дампов управляемых приложений с устройств ARM, но только в отладчике машинного кода.
Для отладки файлов дампа, полученных в режиме ядра, или использования расширения отладки SOS.dll в Visual Studio загрузите средства отладки для Windows из комплекта разработки драйверов для Windows (WDK).
Visual Studio не поддерживает отладку файлов дампа, сохраненных в старом формате полного дампа в режиме пользователя. Полный дамп в режиме пользователя не то же самое, что и дамп с кучей.
Отладка с использованием файлов дампа оптимизированного кода может сопровождаться ложной информацией. К примеру, встраивание компилятором функций может приводить к непредвиденным стекам вызовов, а другие виды оптимизации могут изменять время существования переменных.
Использование Dumpchk.exe
Dumpchk.exe — это служебная программа командной строки, которую можно использовать для проверки правильности создания файла дампа. Если Dumpchk.exe создает ошибку, файл дампа поврежден и не может быть проанализирован. Сведения об использовании Dumpchk.exe см. в разделе использование Dumpchk.exe для проверки файла дампа памяти.
Dumpchk.exe входит в состав компакт-диска Windows xp и может быть установлен на системные \ файлы программы \ поддержки \ , запустив Setup.exe в \ папке средства поддержки \ на компакт-диске Windows XP. вы также можете получить последнюю версию Dumpchk.exe, загрузив и установив средства отладки, доступные в Windows средств отладки на Windows аппаратного обеспечения для разработчиков.
Использование средств Copy-Protection с мини минидампа
Разработчикам также необходимо знать, как схема защиты от копирования может повлиять на малый дамп. Большинство схем защиты от копирования имеют собственные средства дешифрования, и разработчик может научиться использовать эти средства с минидумпвритедумп.
Как удалить файлы дампа памяти
Если понадобилось удалить memory dump, это можно выполнить вручную, пройдя по пути месторасположения объекта на диске. Так, в системном каталоге Windows нужно найти и удалить файл MEMORY.DMP, а также элементы в каталоге Minidump. Кроме того, можно использовать штатный инструмент системы «Очистка диска»:
- вызываем консоль «Выполнить» (Win+R) и вводим команду «Cleanmgr», чтобы перейти к службе;
- жмём кнопку очищения системных файлов, затем находим и отмечаем в списке строчки, касающиеся memory dump. Если не нашлось, значит, их не создавали.
Создание снимков бывает отключено, даже если вы когда-либо активировали эту функцию по причине деятельности специального софта. Если речь о SSD-накопителе, это могут быть программы для работы с твердотельными дисками. Отключение некоторых опций ОС выполняется ими с целью оптимизации работы, поскольку многократные процессы чтения/записи сокращают продолжительность жизни диска. Также причиной отключения дампа памяти могут быть различные программы очистки компьютера и оптимизации системы.
Как включить создание дампа памяти в Windows
Чтобы активировать автоматическое сохранение memory dump в Виндовс, нужно сделать следующее:
- Переходим к свойствам системы любым удобным способом. Например, жмём правой кнопкой мыши по значку «Мой компьютер» (или «Этот компьютер» на «Десятке»). Выбираем «Свойства», затем в перечне опций в левой колонке жмём «Дополнительные параметры системы». Альтернативный вариант – использование Панели управления, где следует перейти в раздел «Система» (то же окно появится при использовании клавиш Win+Pause), а затем в «Дополнительные параметры системы». В Виндовс 10 также можно применить оснастку «Параметры»(Win+I). В окне нужно перейти к разделу «Система – «О системе» – «Сведения о системе» и далее в дополнительные параметры ОС.
- В открывшемся окне на вкладке «Дополнительно» в области «Загрузка и восстановление» жмём «Параметры».
- В итоге манипуляций откроется следующее окно, где следует выбрать тип записи отладочной информации, задать параметры, проставив в нужных пунктах галочки, после чего нажать кнопку «ОК».
Создание файла дампа
При отладке процесса в Visual Studio можно сохранить дамп, когда отладчик останавливает выполнение при возникновении исключения или в точке останова.
Если включена JIT-отладка, можно подключить отладчик Visual Studio к аварийному процессу, который выполняется вне Visual Studio, а затем сохранить файл дампа из отладчика. См. раздел Подключение к выполняющимся процессам.
Сохранение файла дампа
Когда во время отладки происходит остановка (при возникновении ошибки или в точке останова), выберите Отладка > Сохранить дамп как.
В диалоговом окне Сохранить дамп как в разделе Тип файла можно выбрать Минидамп или Минидамп с кучей (значение по умолчанию).
Укажите путь сохранения и выберите имя файла дампа, а затем нажмите Сохранить.
Вы можете создавать файлы дампа с помощью любой программы, которая поддерживает формат минидампов Windows. Такой программой, например, может быть программа командной строки Procdump из Windows Sysinternals, которая может создавать файлы аварийного дампа процесса на основе триггеров или по требованию. Дополнительные сведения об использовании других средств для создания файлов дампа см. в разделе Требования и ограничения.
Примеры
Напишите мини-дамп процесса с именем "Блокнот" (может существовать только один совпадение):
Блокнот C:\>procdump
Напишите полный дамп процесса с идентификатором PID 4572:
C:\>procdump -ma 4572
Запишите 3 мини-дампа за 5 секунд после процесса с именем "Блокнот":
C:\>procdump -s 5 -n 3 блокнот
Записывайте до 3 мини-дампов процесса с именем "использование", когда загрузка ЦП превышает 20 % в течение пяти секунд:
C:\>procdump -c 20 -s 5 -n 3 использование
Напишите мини-дамп для процесса с именем "hang.exe", когда один из Windows не отвечает более чем на 5 секунд:
C:\>procdump -h hang.exe hungwindow.dmp
Создайте мини-дамп процесса с именем Outlook, если общее использование ЦП системы превышает 20 % в течение 10 секунд:
C:\>procdump outlook -p "\Processor(_Total)\% Процессорное время" 20
Создайте полный дамп процесса с именем Outlook, если число дескрипторов Outlook превышает 10 000:
C:\>procdump -ma outlook -p "\Process(Outlook)\Handle Count" 10000
Создайте дамп MiniPlus в Microsoft Exchange Information Store, если у него есть необработанное исключение:
C:\>procdump -mp -e store.exe
Отображение без записи дампа, коды и имена исключений w3wp.exe:
C:\>procdump -e 1 -f "" w3wp.exe
Напишите мини-дамп w3wp.exe если код или имя исключения содержит "NotFound":
C:\>procdump -e 1 -f NotFound w3wp.exe
Запустите процесс, а затем отслеживайте его для исключений:
C:\>procdump -e 1 -f "" -x c:\dumps consume.exe
Зарегистрируйтесь для запуска и попытайтесь активировать современный "приложение". Новый экземпляр ProcDump запускается при активации для отслеживания исключений:
C:\>procdump -e 1 -f "" -x c:\dumpsMicrosoft.BingMaps_8wekyb3d8bbwe! AppexMaps
Зарегистрируйтесь для запуска современного пакета. Новый экземпляр ProcDump запускается при активации (вручную) для отслеживания исключений:
C:\>procdump -e 1 -f "" -x c:\dumps Microsoft.BingMaps_1.2.0.136_x64__8wekyb3d8bbwe
Зарегистрируйтесь в качестве JIT-отладчика (AeDebug). Выполняет полные дампы в c:\dumps:
C:\>procdump -ma -i c:\dumps
См. список примеров командных строк (примеры приведены выше):
C:\>procdump -? -E
Сводка
Функция минидумпвритедумп может быть чрезвычайно полезной инструментом для сбора и устранения ошибок после выпуска продукта. Написание пользовательского обработчика исключений, использующего минидумпвритедумп , позволяет разработчику настраивать сбор информации и улучшать процесс отладки. Функция достаточно гибка для использования в любом проекте на основе C++ и должна рассматриваться как часть процесса стабильности любого проекта.
Файл дампа — это моментальный снимок, показывающий выполнявшийся процесс и загруженные для приложения модули в определенный момент времени. Дамп со сведениями о куче также содержит моментальный снимок памяти приложения на этот момент.
Открытие файла дампа с кучей в Visual Studio в чем-то подобно остановке в точке останова во время сеанса отладки. Хотя вы не можете продолжить выполнение, но можете проверить стеки, потоки и значения переменных приложения на момент создания дампа.
В основном дампы используются для отладки проблем на компьютерах, к которым у разработчиков нет доступа. Если вы не можете воспроизвести на своем компьютере аварийное завершение или зависание программы, возникшие на компьютере клиента, вы можете записать файл дампа с его компьютера. Дампы также создаются тест-инженерами, чтобы сохранить данные для дополнительного тестирования.
Отладчик Visual Studio может сохранять файлы дампа для управляемого и машинного кода. Он может отлаживать файлы дампа, созданные Visual Studio или другими приложениями, способными сохранять файлы в формате минидампа.
Потокобезопасность
Минидумпвритедумп является частью библиотеки dbghelp. Эта библиотека не является потокобезопасной, поэтому любая программа, использующая минидумпвритедумп , должна синхронизировать все потоки, прежде чем пытаться вызвать минидумпвритедумп.
Анализ memory dump в WinDbg
Чтобы перейти к процедуре, открываем объект в утилите (File – Open Crash Dump) или, если предварительно настраивались ассоциации файлов, открываем элемент щелчком мыши. Утилита начнёт анализировать файл, затем выдаст результат.
В окне предполагается ввод команд. Запрос «!analyze –v» позволит получить более детальные сведения о сбое (STOP-код, имя ошибки, стек вызовов команд, приведших к проблеме и другие данные), а также рекомендации по исправлению. Для остановки отладчика в меню программы жмём «Debug» – «Stop Debugging».
Как настроить дамп памяти в Windows
Настройки действий, производимых при аварийной остановке работы ОС, выполняются в том же окне, что и включение создания memory dump («Загрузка и восстановление»), куда мы попадаем из свойств системы.
Здесь можно настроить параметры запуска ОС и назначить определённые действия в случае её отказа, например:
- указать режим записи дампа со сведениями отладки (по умолчанию выбран автоматический, но может быть выставлено значение «Нет»);
- записать события в журнал (записи добавляются в логи);
- отмеченный пункт «Выполнить автоматическую перезагрузку» позволяет системе перезагрузиться после сбоя и продолжить функционировать;
- при выборе опции «Заменять существующий файл дампа», объект будет подвергаться перезаписи при каждой появляющейся ошибке.
При эксплуатации SSD лучше оставить тип записи «Автоматический дамп памяти», но если нужен файл аварийного дампа, лучше выставить «Малый дамп памяти», он самый лёгкий и его несложно переслать другому пользователю, если вам нужна помощь в анализе состояния.
Иногда может потребоваться увеличение размера файла подкачки больше, чем доступно в оперативке, чтобы он соответствовал полному дампу.
Прочитать memory dump можно посредством специализированных утилит, таких как Microsoft Kernel Debugger, BlueScreenView и других.
Использование общедоступного сервера символов Майкрософт
чтобы получить стек для сбоев драйвера или системного уровня, может потребоваться настроить Visual Studio, чтобы указать общедоступный сервер символов майкрософт.
Установка пути к серверу символов Майкрософт
2.1 Типы файлов дампа
Файлы дампа в Windows делятся на две категории: дамп режима ядра и дамп пользовательского режима. Дамп режима ядра - это аварийный дамп, созданный операционной системой. Наиболее классическим является системный синий экран. В это время дамп режима ядра создается автоматически. Пользовательский режим Dump можно разделить на Full Dump (Полный дамп) и Mini Dump (Минидамп). Полный дамп содержит полные данные адресного пространства определенного процесса и много информации, используемой для отладки, в то время как Minidump имеет много типов, которые могут содержать различную информацию в зависимости от потребностей, а некоторые могут содержать только информацию об определенном потоке и некоторых модулях. Сбои приложения во время разработки программы - это дампы пользовательского режима. Поэтому необходимо уточнить состав, способ генерации и функцию этого файла дампа.
Создание минидампа с помощью кода
Фактическая реализация проста. Ниже приведен простой пример использования минидумпвритедумп.
Этот пример демонстрирует базовое использование минидумпвритедумп и минимальную информацию, необходимую для ее вызова. Имя файла дампа является разработчиком; Однако, чтобы избежать конфликтов имен файлов, рекомендуется создать имя файла из имени и номера версии приложения, идентификатора процесса и потока, а также даты и времени. Это также поможет защитить малые дампы, сгруппированные по приложениям и версиям. Разработчик может решить, какой объем информации используется для различения имен файлов минидампа.
Следует отметить, что имя пути в предыдущем примере было создано путем вызова функции жеттемппас для получения пути к каталогу, назначенному для временных файлов. Использование этого каталога работает даже с учетными записями пользователей с минимальными правами доступа, и это также предотвращает загрузку дискового пространства с жесткого диска после того, как он больше не нужен.
Если вы архивируете продукт во время ежедневного процесса сборки, также обязательно включите символы для сборки, чтобы при необходимости можно было выполнить отладку старой версии продукта. Кроме того, необходимо выполнить действия по поддержке полной оптимизации компилятора при создании символов. Это можно сделать, открыв свойства проекта в среде разработки, а для конфигурации выпуска выполните следующие действия.
- В левой части страницы свойств проекта щелкните C/C++. По умолчанию отображаются Общие параметры. В правой части страницы свойств проекта задайте для параметра Формат отладочной информации значение база данных программы (/Zi).
- В левой части страницы свойств разверните узел Компоновщик, а затем щелкните Отладка. В правой части страницы свойств задайте для параметра создать отладочную информацию значение Да (/Debug).
- Щелкните Оптимизация и задайте ссылки на лиминате данные без ссылок (/OPT: REF).
- Установите флажок Включить сворачивание записей COMDAT , чтобы удалить избыточные COMDAT (/OPT: ICF).
2.3.3 Изменение генерации регистрационного кода
Метод изменения регистрационного кода не использовался, но, проконсультировавшись с онлайн-материалами, можно сделать следующее резюме:
Не все ошибки можно найти до выпуска, что означает, что не все ошибки, которые вызывают исключения, можно найти до выпуска. К счастью, корпорация Майкрософт включила в пакет Platform SDK функцию для помощи разработчикам в собрании информации об исключениях, обнаруженных пользователями. Функция минидумпвритедумп записывает необходимые данные аварийного дампа в файл без сохранения всего пространства процесса. Этот информационный файл аварийного дампа называется мини-дампом. В этой технической статье содержатся сведения о том, как создавать и использовать Малый дамп.
Читайте также: