3

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

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

4

2 回答 2

2

因为 .NET 程序集包含元数据,包括每个方法的名称及其参数,所以符号不是获取托管线程的可读堆栈跟踪所必需的。

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

于 2012-06-24T15:06:30.380 回答
1

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

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

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

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

有关更多信息,请参阅此

于 2012-06-25T14:30:28.637 回答