【问题标题】:How to sniff a caught exception in .NET on production machine?如何在生产机器上嗅探 .NET 中捕获的异常?
【发布时间】:2011-03-07 01:33:42
【问题描述】:

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

我发现 3d 派对 API 引发异常并抑制它(我看到性能计数器上升)。

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

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

【问题讨论】:

  • 仅供参考...一些正常的方法(例如 Response.End)会抛出异常,因此 perfmon 中增加的异常计数并不总是坏事。
  • 我不明白你的意思。我同意这还不错。我只需要知道它是什么并将它推到 API 开发人员面前,因为他们没有帮助。而这个例外让我花了 5 周的时间使用的整个应用程序毫无用处......呃......解释一下?

标签: .net debugging exception-handling


【解决方案1】:

您能否使用 Visual Studio 中的远程调试器附加到进程,并将其配置为在引发异常时中断?

【讨论】:

  • 我不确定它会坏掉。它是发布代码,异常是在 3d 方 API 代码中的某处引发的。
【解决方案2】:

在这种情况下,我总是求助于 WinDBG。根据进程的位数下载32bit version64bit version

由于某种蹩脚的原因,最新版本没有直接下载链接(仅在 SDK 中可用),因此请跳到“以前的版本”部分并获取其中的最新版本。

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

  1. 文件 -> 附加到进程 (F6)
  2. 选择目标进程并点击“打开”
  3. 在控制台中输入以下内容:
  • .loadby sos mscorwks(这会加载 .NET 调试器扩展) - sxe clr(告诉调试器中断托管异常) - g(开始!)
  1. 运行进程,直到发生异常。
  2. 调试器会中断,此时输入!pe查看异常详情。

!clrstack 命令可用于查看托管堆栈或尝试使用 !dumpstack 包含本机调用。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 2022-09-24
    • 2020-06-15
    • 2014-12-19
    • 2014-02-20
    • 2012-11-12
    • 2013-11-11
    • 1970-01-01
    相关资源
    最近更新 更多