この記事では、.NET でのダンプ収集についてよく寄せられる質問に回答しています。
[dotnet-dump](dotnet-dump.md) または [crashing process](dumps.md#collect-dumps-on-crash) が管理者特権で実行されている場合、Linux ではダンプしか得られません。なぜでしょうか。
Linux ベースのシステムでは、/proc/sys/kernel/ptrace_scope
によって、ptrace
を呼び出せるユーザーと、そのユーザーがトレースできるプロセスが制御されます。 これは 1
に設定することを推奨します。同じ先祖チェーンのプロセスのみをトレースできます。 これより大きい値の場合、昇格が必要になるか、ptrace
が完全に無効になります。
コンテナー内で実行しているとき、ダンプを収集できないのはなぜですか。
Open Container Initiative テクノロジの下で実行されるアプリケーションについては、seccomp
プロファイルで ptrace
の呼び出しを許可する必要があります。 たとえば、Docker
では、コンテナー ランタイムとして内部で containerd が使用されます。 ランタイムを初期化するとき、コンテナー ホストのカーネル バージョンが 4.8 より上の場合にのみ、あるいは CAP_SYS_PTRACE
機能が指定されていた場合にのみ、ptrace
を許可する既定の seccomp プロファイルが指定されます。
macOS でダンプを収集できないのはなぜですか。
macOS では、ptrace
を使用するとき、ターゲット プロセスのホストに正しい権利が必要になります。 最小限必要な権利については、「既定の権利」を参照してください。
.NET アプリケーションの問題診断にダンプを活用する方法はどこでわかりますか。
次にその他のリソースを示します。
"互換性のあるフレームワークのバージョンが見つかりませんでした" を解決するにはどうすればよいですか
Linux では、設定時に DOTNET_ROOT
環境変数が正しいフォルダーを指している必要があります。 別の .NET バージョンを指している場合、dotnet-dump
では常にこのエラーが発生します。 DOTNET_ROOT
環境変数が設定されていない場合は、別のエラー ("このアプリケーションを実行するには .NET をインストールする必要があります") が発生します。