【发布时间】: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