本文解答有关在 .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 才能运行此应用程序”)。