Linux ダンプのデバッグ
この記事の対象: ✔️ .NET Core 3.0 SDK 以降のバージョン
Linux でダンプを収集する
ヒント
ダンプの収集、分析、その他の注意事項に関してよく寄せられる質問については、「ダンプ: FAQ」を参照してください。
Linux でダンプを収集するための推奨される 2 つの方法:
dotnet-dump
CLI ツール- クラッシュ時にダンプを収集する環境変数
Linux でダンプを分析する
ダンプが収集された後、dotnet-dump analyze
コマンドを使用して dotnet-dump
ツールを使用して分析できます。 この分析手順は、ダンプがキャプチャされた環境と同じアーキテクチャと Linux ディストリビューションを持つマシンで実行する必要があります。
dotnet-dump
ツールでは .NET コードに関する情報を表示できますが、C と C++ など、その他の言語に関するコード問題を理解する上では役に立ちません。
LLDB を使用して、Linux でダンプを分析することもできます。これにより、マネージドとネイティブの両方のコードを分析できます。 LLDB によって SOS 拡張機能が使用され、マネージド コードがデバッグされます。 dotnet-sos
CLI ツールを使用すると、マネージド コードをデバッグするための多くの便利なコマンドがある SOS をインストールできます。 .NET Core ダンプを分析するために、LLDB と SOS には、ダンプが作成された環境の次の .NET Core バイナリが必要です。
- libmscordaccore.so
- libcoreclr.so
- dotnet (アプリを起動するために使用されるホスト)
ほとんどの場合、これらのバイナリは、dotnet-symbol
ツールを使用してダウンロードできます。 必要なバイナリを dotnet-symbol
と共にダウンロードできない場合 (たとえば、ソースから構築された .NET Core のプライベート バージョンが使用中だった場合)、ダンプが作成された環境から、上に一覧表示されているファイルをコピーする必要がある場合があります。 ファイルがダンプ ファイルの横にない場合は、LLDB または SOS コマンドの setclrpath <path>
を使用して、読み込み元のパスを設定し、setsymbolserver -directory <path>
を使用して、シンボル ファイルの参照先のパスを設定することができます。
必要なファイルが使用できるようになったら、デバッグする実行可能ファイルとして dotnet ホストを指定し、LLDB にダンプを読み込むことができます。
lldb --core <dump-file> <host-program>
前に示されたのコマンド ラインでは、<dump-file>
は分析するダンプのパスであり、<host-program>
は .NET Core アプリケーションを起動したネイティブ プログラムです。 アプリが自己完結型である場合を除き、これは通常、dotnet
バイナリです。この場合、.dll 拡張子のないアプリケーションの名前になります。
LLDB が起動したら、setsymbolserver
コマンドを使用して、正しいシンボルの場所をポイントする必要がある場合があります (Microsoft のシンボル サーバーを使用する場合は setsymbolserver -ms
、ローカル パスを指定する場合は setsymbolserver -directory <path>
)。 ネイティブ シンボルを読み込むには、loadsymbols
を実行します。 この時点で、SOS コマンドを使用して、ダンプを分析することができます。
Note
LLDB は sudo apt-get install lldb
コマンドを使用してインストールできます
Windows でダンプを分析する
Linux コンピューターから収集されたダンプは、Visual Studio、Windbg、または dotnet-dump ツールを使用して Windows マシン上で分析することもできます。 Visual Studio と Windbg はどちらもネイティブ コードとマネージド コードを分析できますが、dotnet-dump はマネージド コードのみを分析します。
Note
Visual Studio バージョン 16.8 以降では、.NET Core 3.1.7 以降で生成された Linux ダンプを開き、分析することができます。
- Visual Studio - Visual Studio ダンプ デバッグ ガイドを参照してください。
- Windbg - Windows ユーザーモード ダンプのデバッグに使用するものと同じ手順で windbg 上で Linux ダンプをデバッグできます。 Linux x64 または Arm64 環境から収集されたダンプの windbg の x64 バージョンと、Linux x86 環境から収集されたダンプの x86 バージョンを使用します。
- dotnet-dump - dotnet-dump analyze コマンドを使用してダンプを表示します。 Linux x64 または Arm64 環境から収集されたダンプの dotnet-dump の x64 バージョンと、Linux x86 環境から収集されたダンプの x86 バージョンを使用します。
関連項目
- SOS 拡張機能のインストールの詳細については、dotnet-sos に関するページを参照してください。
- シンボルのダウンロード ツールのインストールと使用の詳細については、dotnet-symbolに関するページを参照してください。
- 役立つ FAQ を含め、デバッグの詳細については、.NET Core 診断のリポジトリを参照してください。
- Linux または Mac に LLDB をインストールする手順については、LLDB のインストールに関する記述を参照してください。
- Linux でのクラッシュ ダンプのデバッグに関するチュートリアルの Linux での練習とトラブルシューティング
.NET