迷你bug工具,用于在抛出异常时捕获异常

本文关键字:抛出异常 捕获异常 用于 bug 工具 迷你 | 更新日期: 2023-09-27 18:19:01

我们有一个程序,由于神秘的(异常来源的文本)消息而失败。它真的很普通,什么也说不出来。如果我在那台机器上安装了VS,我可以在一分钟内解决这个问题,并且可以运行该程序"在抛出异常时捕获异常"。

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

所以有一个工具,可以捕捉异常的CLR (c#起源这里)程序,因为他们抛出,写下来(与所有相关的自省属性与stacktrace),让程序死它的快乐方式?请注意,通用的"handle not handled"异常是不可接受的,因为这个异常被处理了,尽管处理得很糟糕。

迷你bug工具,用于在抛出异常时捕获异常

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

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

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

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

-n选项指定在procdump分离(不终止目标进程)之前写入转储的数量限制。还有很多其他的选择。