转储常见问题解答

本文解答有关在 .NET 中收集转储的常见问题。

如果 [dotnet-dump](dotnet-dump.md) 或 [crashing process](dumps.md#collect-dumps-on-crash) 以提升的状态运行,为什么我只获得 Linux 上的转储?

在基于 Linux 的系统上,/proc/sys/kernel/ptrace_scope 控制谁可以调用 ptrace 以及他们可跟踪的进程。 建议将其设置为 1 - 这意味着只有同一世系链中的进程可以使用跟踪。 任何高于该值的值都需要提升或完全禁用 ptrace

为什么在容器内运行时无法收集转储?

对于按任何开放容器计划技术运行的应用程序,seccomp 配置文件必须允许调用 ptrace。 例如,Docker 在后台使用 containerd 作为容器运行时。 初始化运行时时,它指定默认的 seccomp 配置文件,仅在容器主机的内核版本高于 4.8 或指定了 CAP_SYS_PTRACE 功能时才允许 ptrace

为什么在 macOS 上无法收集转储?

在 macOS 上,使用 ptrace 需要正确地对目标进程的主机进行授权。 有关最低要求权利的信息,请参阅默认权利

在哪里可以详细了解如何利用转储来帮助诊断 .NET 应用程序中的问题?

下面是一些其他资源:

如何解决“无法找到任何兼容的框架版本”

在 Linux 上,DOTNET_ROOT 环境变量必须在设置时指向正确的文件夹。 当它指向另一个 .NET 版本时,dotnet-dump 始终会生成此错误。 如果未设置 DOTNET_ROOT 环境变量,则会生成其他错误(“必须安装 .NET 才能运行此应用程序”)。