この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 5902|答える: 1

[.NET Core] [実戦]。 NET/C#アプリケーションのクラッシュや例外は自動的にDMPダンプファイルを生成します

[リンクをコピー]
2022年11月6日 22:41:42に投稿 | | | |
要件:.NET/C#を使ってアプリケーションを開発する場合、開発者のコードロジックやユーザーの実行環境に関係する可能性のあるプログラムの安定かつ堅牢な実行を保証することは不可能です開発したアプリケーションが問題なく100%保証できるわけではありません問題が起きること自体は悪いことではありませんが、原因を突き止めて解決できない問題が存在するのは恐ろしいことです。

もしアプリケーションが期待通りに実行されず、異常な終了が発生した場合、DMPダンプファイルを自動生成して問題を解決するにはどうすればよいのでしょうか?
ダンプとは、プロセスが作成された際のスナップショットを含むファイルであり、アプリケーションの状態を確認するために使用できます。 .NETアプリケーション、例えば本番環境やCI環境にデバッガを接続するのが難しい場合は、ダンプを使ってデバッグできます。 ダンプを使うことで問題のあるプロセスの状態を把握でき、アプリケーションを停止せずに状態を直接確認できます。

ダンプを回収する

環境変数を使って、障害発生時にダンプを収集するようにアプリケーションを設定することができます。 故障の原因を知りたい場合に役立ちます。 例えば、例外が投げられた際にダンプをキャプチャすることで、失敗したときにアプリの状態を確認することで問題を特定できます。

以下の表は、障害発生時にダンプを収集するためにアプリケーションを設定できる環境変数を示しています。

環境変数
説明
デフォルト
COMPlus_DbgEnableMiniDumpまたはDOTNET_DbgEnableMiniDump1に設定されている場合は、コアダンプ生成を有効にしてください。0
COMPlus_DbgMiniDumpTypeもDOTNET_DbgMiniDumpType収集すべき廃棄物の種類。 詳細は以下の表をご覧ください2(MiniDumpWithPrivateReadWriteMemory)
COMPlus_DbgMiniDumpNameかDOTNET_DbgMiniDumpNameファイルパスをダンプに書きます。 dotnetプロセスを実行中のユーザーが指定されたディレクトリに書き込みアクセス権を持っていることを確認してください。/tmp/coredump.<pid>
COMPlus_CreateDumpDiagnosticsもDOTNET_CreateDumpDiagnostics1に設定されている場合は、ダンププロセスの診断ログを有効にします。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ランタイムの初期バージョンでは、環境変数は引き続き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) in C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:9行目
[createdump] ファイルC:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmpにヒープ付きミニダンプを書き込む
[createdump] ダンプが正常に書き込まれました



プログラムが異常にクラッシュした後は、指定したディレクトリ内で正常に表示されているのがわかりますダンプ.dmpファイルが生成されますどう分析するかは別の話です。

Windows Platform Universal Settings

Windowsでは、Windowsエラー報告(WER)をアプリケーションがクラッシュした際にダンプを生成するように設定できます。

この方法はすべてのプログラムで機能し、 だけではありません。 C++やGoなどの.NETプログラム、 そして。 網。 NET Coreバージョン

  • オープンregedit.exe
  • ディレクトリ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps を開きます
  • ダンプファイルが格納されるディレクトリを設定するために、型REG_EXPAND_SZのKEY DumpFolderを作成します
  • また、ダンプ総数を設定するためにKEY DumpCount タイプを作成REG_DWORDこともできます




もちろん、PowerShellコマンドを使ってこれらを設定することも可能です:

上記の設定によると、プログラムが異常に終了した場合、%LOCALAPPDATA%\CrashDumpsディレクトリにプログラムダンプが作成されます。

リソース:

ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。




先の:Discuzの添付画像、アバター画像、アルバム画像の保存ルールの詳細な説明
次に:実用的な操作方法:System.Web.Optimizationの代わりにBundleTransformerを使う
 地主| 2022年11月6日 22:44:06 に投稿 |
ダンプファイルを送信する:

プログラム起動後、ディレクトリに生成されたダンプファイルがあるかどうかを確認し、もしあれば指定されたインターフェースにファイルを提出し、その後ファイルを削除します。
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com