MSVC调试符号

时间:2013-10-02 21:32:26

标签: .net visual-studio

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

我创建了目录c:/ symbols,将_NT_SYMBOL_PATH设置为Srv * c:\ symbols * http://msdl.microsoft.com/download/symbols,并在工具/选项/调试/符号中检查“环境变量”和“Microsoft服务器”是勾选。

pdb与可执行文件存在于同一目录中,但是我也使用symstore存储在c:/符号中(虽然我仍然在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

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

第一个问题是你有一个非托管调试器。从Tools + Attach to Process,选择进程,不要忘记选择所需的调试器类型。如有必要,单击“选择”按钮,您需要勾选“管理”。

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