Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 5902|Ответ: 1

[.NET Core] [Настоящий бой]. Сбои и исключения приложений NET/C# автоматически генерируют DMP-дампы

[Скопировать ссылку]
Опубликовано 6.11.2022 22:41:42 | | | |
Требования: При разработке приложений на .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.

Ресурсы:

Вход по гиперссылке виден.
Вход по гиперссылке виден.
Вход по гиперссылке виден.




Предыдущий:Подробное объяснение правил хранения изображений вложений Discuz, аватаров и изображений альбомов
Следующий:Практическая эксплуатация: использовать BundleTransformer вместо System.Web.Optimization
 Хозяин| Опубликовано 6.11.2022 22:44:06 |
Отправьте дамп-файлы:

После запуска программы определите, есть ли в каталоге сгенерированный дамп-файл, если да, отправьте файл на указанный интерфейс и затем удалите файл.
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com