Minidebugger工具用于捕获异常,因为它们被抛出

时间:2014-08-22 09:37:27

标签: c# debugging exception clr

我们有一个失败的程序,带有神秘的(异常文本)消息。它非常通用,不会告诉深蹲。我可以在一分钟内解决这个问题,如果我在那台机器上安装了VS并且可以运行该程序,并且可以通过" Catch异常来解决这些问题"。

唉,我们不能在有限的系统上使用它(远程调试器也不用防火墙),但是一个小工具就可以了。

有没有一个工具能够捕获CLR(C#origin here)程序的异常,因为它们被抛出,将它们写下来(使用堆栈跟踪具有所有相关的内省属性)并让程序死掉它们快乐的方式?请注意,通用"句柄未处理"异常是不可接受的,因为这个异常得到了处理,尽管很糟糕。

2 个答案:

答案 0 :(得分:0)

下载WinDbg。安装后,您只需将整个文件夹复制到目标计算机即可。无需进行安装或注册表更改。确保使用与应用程序相同的位版本。将其附加到您的应用程序。使用.loadby sos clr加载SOS。 (如果它是.NET 4之前,请使用.loadby sos mscorwks。)然后使用sxe clr启用所有CLR例外的中断。这将捕获第一次和第二次机会异常。当它中断时,键入!sos.clrstack以获取堆栈跟踪。您也可以键入.dump /ma c:\app.dmp来编写转储文件以供进一步分析;这可以按照你自己的节奏在另一台PC上。然后键入qd以分离并退出。

请注意,如果您只是在发生异常时进行转储,则可以省略加载SOS并转储堆栈,直到稍后将转储移动到另一台计算机进行脱机分析。完成后,您可以从目标PC中删除WinDbg文件夹。

答案 1 :(得分:0)

procdump 是一个很好的工具。每次发生第一次和第二次机会异常时,使用以下命令行启动(-x)托管可执行文件(-g)并编写minidump(-ma)(-e 1) :

procdump.exe -accepteula -e 1 -ma -g -n 100 -x <path to directory to place dumps> <path to executable being monitored>

-n选项指定在procdump detach之前写入的转储数限制(不终止目标进程)。还有很多其他选择。有关详细信息,请参阅procdump site