首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在包中设置“中断所有异常”

如何在包中设置“中断所有异常”
EN

Stack Overflow用户
提问于 2013-03-23 10:31:29
回答 1查看 1.3K关注 0票数 19

我想做一个扩展,在调试器中快速切换CLR异常的中断。

我尝试了几种方法,但都不能令人满意。

下面是我已经尝试过的:

  1. ExceptionSettings.SetBreakWhenThrown (MSDN)

这是非常慢的(参见this Connect issue)。我尝试过问题"Toggle “Break when an exception is thrown.” using macro or keyboard shortcut“中的方法,但两种方法似乎都不可靠:在大多数情况下,只有顶层复选框被设置,当debugging.

  • Call DTE.ExecuteCommand("Debug.Exceptions")显示窗口时,它实际上不会在异常时中断,并且在窗口出现之前调用SetWindowsHookEx (MSDN)来拦截它(这样用户就不会看到flash )。这似乎是可能的,因为我能够截获消息并获得HWND。但是它看起来有点老套,而且window并不是那么容易操作的(它有一些奇怪的SysListView32与自定义复选框和SysTreeView32的组合)。因此,我把它留给最后一次机会,为托管代码获取solution.

  • Somehow IDebugEngine2 (MSDN),并在调试会话开始时调用IDebugEngine2.SetException (MSDN)。这似乎是可能的,但我在获取调试引擎时遇到了问题。我尝试过使用IVsLoader描述的on MSDN forums方法,但我非常确定它给了我一个与调试会话无关的新实例。

我在这里也问过这个问题:"Visual Studio: How to get IDebugEngine2 from VS Package (except IVsLoader)",但没有得到解决方案。

我尝试过使用IVsDebugger.AdviseDebugEventCallback (MSDN)并传入IDebugEventCallback2 (MSDN )的实现,但我总是得到pEnginenull (也没有IDebugEngineCreateEvent2 )。

我确实得到了IDebugSessionCreateEvent2 (未记录?)可以从中获取IDebugSession2,但是它的SetException调用总是为我提供错误参数的HRESULT,所以我可能在这里遗漏了一些东西(从IVsLoader调用engine上的SetException可以得到OK,只是不起作用)。

有没有比那些更好的其他方法,或者我在现有的方法中遗漏了什么?

UPDATE/NOTE:

如果你发现这个问题是因为你想要一个更快的“在所有异常上中断”,我已经做了一个免费的扩展,你可以从Visual Studio Gallery:Exception Breaker获得。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15582736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档