Требования: При разработке приложений на .NET/C# ни один разработчик не может обеспечить стабильное и надёжное выполнение программы, что может быть связано с логикой кода разработчика или средой работы пользователяНет 100% гарантии, что разработанное вами приложение будет безпроблемнымИметь проблему — это не ужасно, но ужасно то, что она не может найти причину и решить проблему.
Если приложение не запускается как следует и происходит ненормальный выход, как можно автоматически сгенерировать DMP-файл для устранения проблемы?
Дамп — это файл, содержащий снимок процесса на момент его создания и который может использоваться для проверки состояния приложения. Когда сложно подключить отладчик к .NET-приложению, например, к производственной или CI-среде, можно использовать дампы для отладки приложения. Использование дампов фиксирует состояние проблемных процессов, и состояние можно проверять напрямую без остановки приложения.
Собирайте свалки
Вы можете использовать переменные среды, чтобы настроить приложение на сбор дампов в случае сбоя. Это полезно, если вы хотите узнать причину отказа. Например, захват дампов при сброшенном исключении помогает выявлять проблемы, проверяя состояние приложения при сбое.
В следующей таблице показаны переменные среды, которые можно использовать для настройки приложения для сбора дампов в случае сбоя.
переменная среды | иллюстрировать | По умолчанию | | COMPlus_DbgEnableMiniDump или DOTNET_DbgEnableMiniDump | Если установлено на 1, включите генерацию дампа ядра. | 0 | | COMPlus_DbgMiniDumpType или DOTNET_DbgMiniDumpType | Тип свалки, которую нужно собирать. Подробности смотрите в таблице ниже | 2 (MiniDumpWithPrivateReadWriteMemory) | | COMPlus_DbgMiniDumpName или DOTNET_DbgMiniDumpName | Запишите путь файла к дампу. Убедитесь, что пользователь, использующий процесс dotnet, имеет доступ к записи в указанную директорию. | /tmp/coredump.<pid> | | COMPlus_CreateDumpDiagnostics или DOTNET_CreateDumpDiagnostics | Если установлено 1, включите диагностическое логирование процесса дампа. | 0 | | COMPlus_EnableCrashReport или DOTNET_EnableCrashReport | (Требуется .NET 6 или выше) Если установлено в 1, время выполнения генерирует отчёт о сбоях в формате JSON, содержащий информацию о потоках и стековых кадрах неисправного приложения. Название отчёта о сбое — это путь/имя дампа, добавленный к .crashreport.json. | | | COMPlus_CreateDumpVerboseDiagnostics или DOTNET_CreateDumpVerboseDiagnostics | (Требуется .NET 7 или выше) Если установлено на 1, включите подробный диагностический лог для процесса дампа. | 0 | | COMPlus_CreateDumpLogToFile или DOTNET_CreateDumpLogToFile | (требуется .NET 7 или новее) Путь файла к диагностическому сообщению должен быть записан. Если не установлено, на консоль неисправного приложения записывается диагностическое сообщение. | |
Для этих переменных среды .NET 7 стандартизирует префикс DOTNET_ вместо COMPlus_. Однако префикс COMPlus_ продолжит работать корректно. Если выВ ранних версиях .NET runtime переменные среды всё ещё должны использовать префикс COMPlus_。
Создать новый тест приложения для .NET Core 6
Используйте VS 2022 для тестирования нового теста приложения для .NET Core 6 с помощью следующего кода:
Запустите программу с помощью команды cmd, как показано на изображении ниже:
COMPlus_EnableCrashReport=1 COMPlus_DbgEnableMiniDump=1 COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp" COMPlus_CreateDumpDiagnostics=1 Необработанное исключение. Исключение системы: itsvse.com в программе. <Main>$(String[] args) в C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:line 9 [созданный умп] Запись минидампа с heap в файл C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp [созданный умп] Дамп успешно написан
Вы можете увидеть, что после аномального сбоя программа успешно попадает в указанный нами каталогФайл дампа .dmp генерируетсяЧто касается анализа — это совсем другое дело.
Универсальные настройки платформы Windows
В Windows можно настроить отчётность об ошибках Windows (WER) для генерации дампов при сбое приложения.
Этот метод работает для всех программ, а не только для . .NET-программы, такие как C++, Go и др.; И и. СЕТЬ. Версия для NET Core
- Открытый regedit.exe
- Откройте каталог HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
- Создайте папку KEY DumpFolder типа REG_EXPAND_SZ для настройки каталога, где хранятся дамп-файлы
- Вы также можете создать KEY DumpCount типа REG_DWORD настроить общее количество дампов
Конечно, их можно настроить с помощью команд PowerShell:
Согласно приведённой выше конфигурации, если программа выходит аномально, она создаёт дамп программы в каталоге %LOCALAPPDATA%\CrashDumps.
Ресурсы:
Вход по гиперссылке виден.
Вход по гиперссылке виден.
Вход по гиперссылке виден.
|