首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式检查Visual Studio扩展中的堆栈?

如何以编程方式检查Visual Studio扩展中的堆栈?
EN

Stack Overflow用户
提问于 2020-06-24 20:32:32
回答 1查看 83关注 0票数 0

在VS扩展中,假设代码刚刚命中断点,并且处于中断模式。如何以编程方式检查堆栈?另外,有没有办法找出最后执行的语句是什么?

我还没能找到先进的样品。虽然有hello-world type samples,但它们主要集中于在Visual Studio IDE中添加/修改UI元素。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-25 23:49:49

您需要挂钩到EnvDTE.Events.DebuggerEvents.OnEnterBreakMode事件或等效事件中,才能知道进程何时停止(因此有一个调用堆栈)。请注意保留对EnvDTE.Events.DebuggerEvents的引用,否则它可能会被垃圾回收,并且与事件处理程序的连接会丢失(在C#中通常不会发生这种情况,但由于EnvDTE事件COM包装器的实现方式,这是一个已知问题)。

一旦调试器进入中断模式,您就可以像这样迭代EnvDte.Debugger.CurrentThread.StackFrames

代码语言:javascript
复制
foreach (var frame in dte.Debugger.CurrentThread.StackFrames.Cast<EnvDTE.StackFrame>())
    ...

如果您希望修改当前线程/堆栈或获取比EnvDTE公开的更多详细信息,这也是可能的,但不是微不足道的。有一个名为IDebuggerInternal的COM接口可以直接公开这些内容,但它不是从公共MS导出的。但是,由于它是一个COM接口,您可以在C#中重新声明它并将SVsShellDebugger实例强制转换为它。如果你想走这条路,我建议反汇编Microsoft.VisualStudio.Debugger.Interop.Internal,Version=11.0.0.0 (例如使用dotPeek),以获得接口定义和GUID。

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

https://stackoverflow.com/questions/62555122

复制
相关文章

相似问题

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