2010-06-22 35 views
3

有没有办法找到从应用程序外部.NET代码捕获的异常?如何在生产机器上嗅探捕获的.NET异常?

我发现3D派对API抛出一个异常,并抑制它(我看到perf计数器上升)。

但它不显示它在跟踪(我试过sysinternals dbgView)。

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

+0

FYI ...一些正常的方法(如Response.End)会抛出异常,因此perfmon中递增的异常计数并不总是很差。 – David 2010-06-23 03:23:37

+0

我没有明白你的观点。我同意这并不坏。我只需要知道它是什么,并将它推到API开发人员面前,因为他们不帮助。而这个例外使得整个应用程序,我花了5个星期无用.....呃..解释? – 2010-06-23 09:19:07

回答

2

在这种情况下,我总是转向的工具是WinDBG。根据进程的位数,下载32bit version64bit version

由于一些蹩脚的原因,最新版本没有直接下载链接(仅在SDK中可用),因此请跳至“以前的版本”部分并获取最新的版本。安装并执行以下操作后

负载的WinDBG:

  1. 文件 - >附加到一个进程(F6)
  2. 选择目标进程,然后单击“打开”
  3. 在控制台中输入以下:
    • .loadby sos mscorwks(此加载.NET调试器扩展)
    • sxe clr(告诉调试到b reak上托管异常)
    • g(GO!)
  4. 运行过程,直到发生异常。
  5. 调试器将中断,此时输入!pe以查看异常详细信息。

!clrstack命令有助于查看托管堆栈或尝试!dumpstack以包含本地调用。

如果调试程序在您不关心的异常处停止,只需再次点击'g',直到找到想要查看的异常。

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

1

您可以使用visual studio中的远程调试器附加进程,并在发生异常时将其配置为中断吗?

+0

我不确定它会中断。它是发布代码,异常会在3d party API代码中引发。 – 2010-06-22 23:28:33