2010-12-03 58 views
0

我想执行正在运行的.Net进程的崩溃转储,但实际上并未崩溃,以供以后调试。我怎样才能做到这一点?如何捕获正在运行的.Net进程到磁盘?

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

+0

托管应用程序的Minidump调试会吸引落基山巨石的大小。你必须绝望。附加一个托管调试器是非常优越的。但试试吧,google sos.dll – 2010-12-03 21:45:47

回答

1

更新:在这一点上,我会建议使用procdump来代替,因为它支持许多额外的选项,以捕获转储。

对于故障转储您最好的选择可能是Debugging Tools for Windows adplus。它会自动连接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

(全面披露:我在视频演示,所以原谅无耻的插头)。

1

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

请参阅this关于如何做到这一点的博客条目。

0

我安装denbugging工具窗口,并使用ADPlus的与-hang设置

+0

挂起转储会给你一个过程的快照。这在许多情况下可能非常有用,但它通常不会帮助您排除故障。为此,崩溃转储更有用。 – 2010-12-03 21:36:50

0

可以使用Process Dumper为任意用户模式进程做到这一点。

的用户模式进程自卸车 (用户转储)转储任何正在运行的Win32 进程的内存图像上的苍蝇, 不必附加调试器,或 终止目标进程。

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

相关问题