次の方法で共有


Linuxダンプのデバッグ処理

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

Linux でダンプを収集する

ヒント

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

Linux でダンプを収集するには、次の 2 つの方法をお勧めします。

Linux でダンプを分析する

ダンプを収集した後は、 dotnet-dump ツールと dotnet-dump analyze コマンドを使用して分析できます。 この分析手順は、ダンプがキャプチャされた環境と同じアーキテクチャと Linux ディストリビューションを持つマシンで実行する必要があります。 dotnet-dump ツールは.NET コードに関する情報の表示をサポートしていますが、C や C++ などの他の言語のコードの問題を理解する場合には役立ちません。

または、 LLDB を使用して Linux 上のダンプを分析できます。これにより、マネージド コードとネイティブ コードの両方を分析できます。 LLDB では、SOS 拡張機能を使用してマネージド コードをデバッグします。 dotnet-sos CLI ツールを使用して SOS をインストールできます。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 コマンド を使用してダンプを分析できます。

LLDB はコマンドを使用してインストールできます sudo apt-get install lldb

Windows でダンプを分析する

Linux マシンから収集されたダンプは、 Visual StudioWindbg、または dotnet-dump ツールを使用して Windows マシンで分析することもできます。 Visual Studio と Windbg の両方でネイティブ コードとマネージド コードを分析できますが、dotnet-dump ではマネージド コードのみが分析されます。

Visual Studio バージョン 16.8 以降では、.NET Core 3.1.7 以降で生成された Linux ダンプを開いて分析 できます。

  • Visual Studio - Visual Studio ダンプ デバッグ ガイドを参照してください。
  • Windbg - Windows ユーザー モード ダンプのデバッグに使用するのと 同じ手順 を使用して、windbg 上の Linux ダンプをデバッグできます。 Linux x64 または Arm64 環境から収集されたダンプには x64 バージョンの windbg を、Linux x86 環境から収集されたダンプには x86 バージョンを使用します。
  • dotnet-dump - dotnet-dump analyze コマンドを使用してダンプを表示します。 Linux x64 または Arm64 環境から収集されたダンプには x64 バージョンの dotnet-dump、Linux x86 環境から収集されたダンプには x86 バージョンを使用します。

こちらも参照ください

  • SOS 拡張機能のインストールの詳細については、dotnet-sos を参照してください。
  • dotnet-symbol を使用すると、シンボルダウンロードツールのインストールと使用の詳細を確認できます。
  • デバッグの詳細 (便利な FAQ など) の .NET Core 診断リポジトリ
  • Linux または Mac に LLDB をインストールする手順については、LLDB をインストールします。
  • Linuxでの練習とトラブルシューティングにより、Linuxでのクラッシュダンプのデバッグに関するチュートリアルを学びましょう。