如何在生产机器上的.NET中嗅探一个被捕获的异常?

时间:2010-06-22 22:03:55

标签: .net debugging exception-handling

有没有办法从应用程序外部找到.NET代码捕获的异常?

我发现3d party API会抛出异常并对其进行抑制(我看到perf计数器正在上升)。

但它并没有在trace中显示它(我尝试了sysinternals dbgView)。

什么工具可以显示捕获的异常?

2 个答案:

答案 0 :(得分:2)

在这种情况下我总是转向的工具是WinDBG。下载32bit version64bit version,具体取决于流程的位数。

由于某些原因,最新版本没有直接下载链接(仅在SDK中提供),因此请跳至“上一版本”部分并获取最新版本。

安装后加载WinDBG并执行以下操作:

  1. 文件 - >附加到流程(F6)
  2. 选择目标流程,然后点击“打开”
  3. 在控制台中输入以下内容:
    • .loadby sos mscorwks(这会加载.NET调试器扩展)
    • sxe clr(告诉调试器中断托管异常)
    • g(GO!)
  4. 运行该过程,直到发生异常。
  5. 调试器将中断,此时输入!pe以查看异常详细信息。
  6. !clrstack命令可用于查看托管堆栈或尝试!dumpstack包含本机调用。

    如果调试器因您不关心的异常而停止,只需再次点击“g”,直到找到想要查看的异常。

    !help命令将显示所有可用的.NET扩展,如果您想深入挖掘,我强烈推荐Tess Ferrandez's blog

答案 1 :(得分:1)

您是否可以使用Visual Studio中的远程调试器附加到进程并将其配置为在抛出异常时中断?