Изисквания: При разработване на приложения с .NET/C# е невъзможно за който и да е разработчик да гарантира стабилно и стабилно изпълнение на програмата, което може да е свързано с логиката на кода на разработчика или с работещата среда на потребителяНяма 100% гаранция, че приложението, което разработвате, ще бъде без проблемиНе е ужасно да имаш проблем, но ужасното е, че има проблем, който не може да открие причината и да го реши.
Ако приложението не се изпълни както се очаква и настъпи необичайно изходене, как може автоматично да се генерира DMP dump файл за отстраняване на проблема?
Dump е файл, който съдържа моментна снимка на процеса при създаването му и може да се използва за проверка на състоянието на приложението. Когато е трудно да се прикачи дебъгер към .NET приложение, като продукционна или CI среда, можете да използвате dump-ове, за да дебъгнете приложението. Използването на dump-ове улавя състоянието на проблемните процеси и състоянието може да се проверява директно без спиране на приложението.
Събиране на отпадъци
Можете да използвате променливи на средата, за да конфигурирате приложението си да събира dump-ове в случай на повреда. Това е полезно, ако искате да разберете причината за повредата. Например, улавянето на dump-ове, когато се хвърли изключение, помага да се идентифицират проблеми чрез проверка на състоянието на приложението, ако се провали.
Следващата таблица показва променливите на средата, които можете да използвате, за да конфигурирате приложението си да събира dump-ове в случай на повреда.
Променлива на околната среда | илюстрирам | По подразбиране | | COMPlus_DbgEnableMiniDump или DOTNET_DbgEnableMiniDump | Ако е настроено на 1, активирай генерирането на ядрен дамп. | 0 | | COMPlus_DbgMiniDumpType или DOTNET_DbgMiniDumpType | Типът сметище, което трябва да се събира. Вижте таблицата по-долу за подробности | 2 (MiniDumpWithPrivateReadWriteMemory) | | COMPlus_DbgMiniDumpName или DOTNET_DbgMiniDumpName | Запиши пътя на файла към dump-а. Уверете се, че потребителят, който изпълнява dotnet процеса, има достъп до зададената директория. | /tmp/coredump.<pid> | | COMPlus_CreateDumpDiagnostics или DOTNET_CreateDumpDiagnostics | Ако е настроено на 1, активирайте логването на диагностика за процеса на dump. | 0 | | COMPlus_EnableCrashReport или DOTNET_EnableCrashReport | (Изисква .NET 6 или по-нова версия) Ако е зададено на 1, runtime генерира JSON-форматиран доклад за неуспех, който включва информация за нишките и стековите кадри на неуспешното приложение. Името на доклада за срива е пътят/името на dump, добавено към .crashreport.json. | | | COMPlus_CreateDumpVerboseDiagnostics или DOTNET_CreateDumpVerboseDiagnostics | (Изисква .NET 7 или по-нова версия) Ако е настроено на 1, активирайте детайлното диагностично логване за процеса на dump. | 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 Необработено изключение. System.Exception: 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 [създадена съдия] Dump успешно написан
Виждате, че след като програмата се срине необичайно, тя е успешно в посочената от нас директорияФайлът за dump .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, за да конфигурирате директорията, в която се съхраняват dump файловете
- Можеш също да създадеш KEY DumpCount от типа REG_DWORD да конфигурираш общия брой dumps
Разбира се, можете също да ги конфигурирате чрез PowerShell команди:
Според горната конфигурация, ако програмата излезе необичайно, тя ще създаде dump на програмата в директорията %LOCALAPPDATA%\CrashDumps.
Ресурси:
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
|