我试图在一个非常大的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应用程序不需要符号路径吗?
答案 0 :(得分:2)
因为.NET程序集包含元数据,包括每个方法的名称及其参数,所以不需要符号来获取托管线程的可读堆栈跟踪。
符号可以提供的一件事是每个语句的文件名和行号,因此您可以更容易地找出堆栈跟踪中的哪些帧对应于源代码中的哪些行。
答案 1 :(得分:1)
正如迈克尔所说,对于托管代码来说,符号并不是绝对必要的,因为大多数相关信息在运行时都可以作为元数据使用,但如果您正在挖掘本机代码,那么使用符号非常有用。
对于许多场景,您只需执行.symfix
即可告知WinDbg使用Microsoft的公共符号服务器。这将使您可以访问代码中所有CLR和Win32特定调用的符号。如果设置路径,请务必执行.reload
。
如果您的代码也包含本机非Microsoft程序集,则需要将相应PDB文件的位置附加到符号路径。使用.sympath
命令。
要对符号加载进行疑难解答,请使用!sym noisy
命令。
了解更多信息see this。