0

我有一个运行大约一个小时后锁定的 .net 应用程序。我希望对其线程进行尸检以找出每个线程处于什么状态。问题是在附加调试器(MSVC12)之后,没有明显的方法可以获得人类可读的堆栈跟踪。该应用程序是使用外部测试工具启动的,因此我无法在调试器中轻松启动它。

我创建了目录 c:/symbols,将 _NT_SYMBOL_PATH 设置为 Srv*c:\symbols* http://msdl.microsoft.com/download/symbols,并在 Tools/Options/Debugging/Symbols 中检查了“环境变量”和勾选“Microsoft 服务器”。

pdb 与可执行文件位于同一目录中,但我也使用 symstore 存储在 c:/symbols 中(虽然我仍在 W7 上,但它似乎是 W8 SDK 附带的)。在 c:/symbols 中有一个新创建的子目录,尽管 symstore 说它找到了一个 ID (0000001) 然后存储了 0 个文件(它还说有 0 个错误和 0 个被忽略的文件)。

我得到的堆栈跟踪往往相当短,有些看起来相同(可能是空闲线程?),例如

ntdll.dll!0000000076ff137a()    Unknown
KernelBase.dll!000007fefd071a7a()   Unknown
kernel32.dll!0000000076d91559() Unknown
mscorlib.ni.dll!000007fef171e9e2()  Unknown
mscorlib.ni.dll!000007fef12935f8()  Unknown
0000000008e20298()  Unknown
mscorlib.ni.dll!000007fef12935f8()  Unknown
00000000572fd470()  Unknown

提前谢谢了。

4

1 回答 1

1

第一个问题是您附加了一个非托管调试器。从工具 + 附加到进程中,选择进程并且不要忘记选择您想要的调试器类型。如有必要,单击“选择”按钮,您希望勾选“托管”。

您确实有符号问题,它应该已经从符号服务器下载了 ntdll.dll 等的符号。从提供的信息很难诊断,您当然不应该使用“symstore”或必须设置 _NT_SYMBOL_PATH 环境变量,勾选“Microsoft 服务器”复选框就足够了。请确保 c:\symbols 目录是可访问的,选择 c:\users 主目录中的路径是安全的。您可以从 Debug + Windows + Modules 窗口获得额外的诊断信息。右键单击条目并选择符号加载信息。

于 2013-10-02T22:39:35.767 回答