【问题标题】:Access Visual Studio's $exception variable访问 Visual Studio 的 $exception 变量
【发布时间】:2020-04-06 06:15:41
【问题描述】:

我遇到onClose 事件处理程序由于抛出异常而正在运行的情况。

如果我在附加 VS 调试器的情况下强制它发生,那么我可以在 VS 'Locals' 中看到一个 $exception 局部变量,其中包含(有些)有趣的信息。

但我不知道如何在代码中处理该异常,以便记录它。 :(

  • 我的 eventHandler 的 eventArgs 只是 Empty 事件。
  • 问Marshall.GetExceptionCode/Pointers() 并没有给我任何有用的信息。

显然有些人知道这个异常,因为 VS 可以向我展示它......我怎样才能得到那个异常?

【问题讨论】:

  • 这是什么类型的应用? OnClose 事件在什么实例上运行?
  • "onClose 事件处理程序由于抛出异常而正在运行" 是什么意思?异常如何导致onClose 运行?
  • Visual Studio 能够向您展示它,因为它是进程的调试器。它首先捕获异常并从评估堆栈中读取它,然后让catch 块运行(从评估堆栈中获取它)。当执行到达您的代码时,它是调用堆栈中更高的局部变量。因为调用堆栈是一个实现细节,并且槽分配受 JIT 决策的影响,所以遍历调用堆栈以查找局部变量充其量是不可靠的。
  • 来自@madreflection。 VS 神奇地抓取当前异常并将其放入$exception 伪变量中,以使您的调试体验更好。您可以在catch 块中访问它的唯一位置(在您的代码中)。如果你想捕捉它,你需要在那里进行。 VS 调试器为您提供了更多伪变量:docs.microsoft.com/en-us/visualstudio/debugger/…
  • 是的,我猜这可能就是答案。嗯……

标签: c# visual-studio debugging exception


【解决方案1】:

您真正想要的功能不存在。 VS 神奇地抓取当前异常并将其放入$exception 伪变量中,以使您的调试体验更好。

您可以(在您的代码中)在catch 块中访问它的唯一位置。如果你想捕捉它,你需要在那里进行。 VS 调试器为您提供了更多伪变量:https://docs.microsoft.com/en-us/visualstudio/debugger/pseudovariables?view=vs-2019

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-10
    • 2011-10-22
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多