傾印的常見問題

本文會回答在 .NET 中收集傾印的常見問題。

為何只有在 [dotnet-dump](dotnet-dump.md) 或我的 [損毀處理序](dumps.md#collect-dumps-on-crash) 以提高權限的方式執行時,才能在 Linux 上取得傾印?

在以 Linux 為基礎的系統上,/proc/sys/kernel/ptrace_scope 會控制誰可以呼叫 ptrace,以及其可以追蹤的處理序。 建議您將其設定為 1,這表示只有相同上階鏈結中的處理序可以使用追蹤。 高於此值的任何值都需要提高權限,或者,也可以完全停用 ptrace

為何我在容器內執行時無法收集傾印?

對於依靠任何開放式容器方案技術來執行的應用程式,seccomp 設定檔必須允許呼叫 ptrace。 例如,Docker 在幕後使用容器化作為容器執行階段。 在初始化執行階段時,其會指定預設的 seccomp 設定檔,以便只在容器主機的核心版本高於 4.8 或指定了 CAP_SYS_PTRACE 功能時才允許 ptrace

為何無法在 macOS 上收集傾印?

在 macOS 上使用 ptrace 時,需要適當地授權目標處理序的主機。 如需最低必要權利的相關資訊,請參閱預設權利

我可以在哪裡深入了解要如何利用傾印,以協助診斷 .NET 應用程式中的問題?

如何解決「無法找到任何相容的架構版本」

在 Linux 上,如有設定 DOTNET_ROOT 環境變數,則此變數必須指向正確的資料夾。 當其指向其他 .NET 版本時,dotnet-dump 一律會產生此錯誤。 如未設定 DOTNET_ROOT 環境變數,則會產生其他錯誤 (「您必須安裝 .NET 才能執行此應用程式」)。