WinDBG - 不包括符号路径



我正在尝试跟踪非常大的 ASP.NET 应用程序中可能的内存泄漏。 在尝试在实时环境中使用此工具之前,我正在尝试熟悉 WinDBG。

按照以下文章中的说明进行操作,我发现这很有帮助:http://humblecoder.co.uk/uncategorized/spotting-a-memory-leak-with-windbg-in-net。 我能够创建 ASP.NET 进程的"内存转储"文件,并显示委托导致本文中指定的内存泄漏。 我指的是文章中开头的段落:"接下来我们需要符号"。 我没有使用文件\符号文件路径添加符号文件;在 WinDBG 中,但我似乎仍然能够调试应用程序并完成本文的其余步骤。 ASP.NET 应用程序不需要符号路径吗?

由于 .NET 程序集包含元数据(包括每个方法的名称及其参数),因此不需要符号来获取托管线程的可读堆栈跟踪。

符号可以提供的一件事是每个语句的文件名和行号,因此您可以更轻松地确定堆栈跟踪中的哪些帧对应于源代码中的哪些行。

正如 Michael 所说,符号对于托管代码并不是绝对必要的,因为大多数相关信息在运行时都可以作为元数据提供,但是如果您正在深入研究本机代码,那么拥有符号非常有用。

在许多情况下,只需执行.symfix即可告知 WinDbg 使用Microsoft的公共符号服务器。这将使您能够访问代码中所有 CLR 和 Win32 特定调用的符号。请记住,如果您设置了路径,请执行.reload

如果代码还包含本机非Microsoft程序集,则需要将相应 PDB 文件的位置追加到符号路径。为此,请使用 .sympath 命令。

要对符号加载进行故障排除,请使用 !sym noisy 命令。

有关详细信息,请参阅此处。

最新更新