Linux ダンプのデバッグ

この記事の対象: ✔️ .NET Core 3.0 SDK 以降のバージョン

Linux でダンプを収集する

ヒント

ダンプの収集、分析、その他の注意事項に関してよく寄せられる質問については、「ダンプ: FAQ」を参照してください。

Linux でダンプを収集するための推奨される 2 つの方法:

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 バイナリが必要です。

  1. libmscordaccore.so
  2. libcoreclr.so
  3. 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 StudioWindbg、または 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 での練習とトラブルシューティング