如何将正在运行的.Net进程捕获到磁盘?

时间:2010-12-03 15:25:19

标签: .net debugging

我想执行一个正在运行的.Net进程的崩溃转储,它实际上没有崩溃,以便以后调试。我怎么能这样做?

这是在Windows 2k3中运行的.Net 4应用程序。

4 个答案:

答案 0 :(得分:1)

您可以使用windbg生成内存转储。

请参阅this博客文章,了解如何执行此操作。

答案 1 :(得分:1)

我为窗口安装了denbugging工具,并使用了带有-hang设置的ADPlus

答案 2 :(得分:1)

您可以使用Process Dumper为任何用户模式进程执行此操作。

  

用户模式流程转储程序   (userdump)转储任何正在运行的Win32   动态处理记忆图像,   没有附加调试器,或   终止目标进程。

我认为像这样生成的转储的可调试性仅限于WinDbg。您将无法获得完整的Visual Studio易用性。有关托管应用程序转储的事后调试的信息here

答案 3 :(得分:1)

更新:此时我建议使用procdump,因为它支持很多其他选项来捕获转储。

对于崩溃转储,您最好的选择可能来自Debugging Tools for Windows。当发生未处理的异常时,它会自动附加cdb调试器并创建转储文件。如果需要,您甚至可以指示它为所有第一次机会异常创建转储。语法很简单,因此要对进程调用app.exe进行崩溃转储,您可以执行类似

的操作
adplus -crash -pn app.exe -o <output dir>

获得转储后,可以将其加载到WinDbg中,加载SOS并使用!threads!printexception命令查看异常。

如果您有兴趣,可以在第9频道播放一些带有调试演示的视频。其中一个演示是崩溃转储。

http://channel9.msdn.com/posts/MDCC-TechTalk-Advanced-NET-Debugging-part-1

http://channel9.msdn.com/posts/MDCC-TechTalk-Advanced-NET-Debugging-part-2

(完全披露:我是视频中的主持人,所以请原谅无耻的插件)。