在Release版本中获取没有pdb文件的所有线程的堆栈跟踪

时间:2015-07-17 16:49:52

标签: c# .net debugging stack-trace

我有一个正在运行的C#应用​​程序遇到了某种死锁,我想获得所有正在运行的线程的堆栈跟踪来分析问题。不幸的是,这个应用程序是一个发布版本,我丢失了pdb个文件。

当我连接VS2013调试器(通过远程调试)时,我可以看到线程列表,但不能看到任何堆栈跟踪。堆栈跟踪窗口只包含"外部代码"对于每个线程。

看到基本的堆栈跟踪会很有帮助 - 我不关心行号这样的细节。

更新 我实际观察到,只要我运行Release配置(远程主机运行与VS完全相同的构建,并且PDB可用),我就会遇到完全相同的问题。我只能在Debug版本中看到堆栈跟踪。这可能是缺少PDB文件的其他问题吗?

2 个答案:

答案 0 :(得分:1)

我使用WinDbg找到了解决方案。在WinDbg中,附加到进程,然后发出以下命令。

.cordll -ve -u -l
~*e !clrstack

前者将加载托管调试的扩展名(请参阅here),后者将打印所有回溯(信用到this answer)。我相信这只是意味着对所有线程来说,!clrstack"。

有用的提示。 Windows调试工具的安装程序可能希望在安装.NET框架后重新启动系统。 你可能不想要这个,因为它会杀死你想调试的应用程序。即使最糟糕的是,当它告诉你需要重新启动时,它重新启动无论你点击" OK"或"取消"。幸运的是,可以在另一台计算机上运行安装程序,并将WinDbg复制到目标计算机,无需安装即可正常运行。

答案 1 :(得分:0)

您可以使用.NET Reflector对DLL进行反编译,获取生成的源并在调试中重新编译它,以便包含.pdb文件,然后进行调试。