我想执行一个正在运行的.Net进程的崩溃转储,它实际上没有崩溃,以便以后调试。我怎么能这样做?
这是在Windows 2k3中运行的.Net 4应用程序。
答案 0 :(得分:1)
答案 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
(完全披露:我是视频中的主持人,所以请原谅无耻的插件)。