在 EnvDTE 中调试时捕获 VS 局部变量

本文关键字:VS 局部变量 EnvDTE 调试 | 更新日期: 2023-09-27 17:55:21

是否可以使用 EnvDTE 作为 .vsix Visual Studio 扩展来捕获局部变量和调试窗口使用的调试数据?还是可以通过另一种方法?

我想创建一个自定义的局部变量窗口,我们可以对其进行修改以根据需要显示一些更重的内容,而不会牺牲高级用户的原始局部变量窗口。理想的解决方案是获取发送到本地窗口的数据,以便我可以构建自己的树。

在 EnvDTE 中调试时捕获 VS 局部变量

事实证明,这其实很简单!

DTE dte = (DTE).Package.GetGlobalService(typeof(DTE));
if(dte.Debugger.CurrentStackFrame != null) // Ensure that debugger is running
{
    EnvDTE.Expressions locals = dte.Debugger.CurrentStackFrame.Locals;
    foreach(EnvDTE.Expression local in locals)
    {
        EnvDTE.Expressions members = expression.DataMembers;
        // Do this section recursively, looking down in each expression for 
        // the next set of data members. This will build the tree.
        // DataMembers is never null, instead just iterating over a 0-length list.
    }
}

每个表达式包含:

  • 名称(字符串)
  • (局部变量窗口中显示的字符串
  • 类型(类型的字符串名称)
  • 父级
  • (类型为级类型)
  • 数据成员(其子项的可迭代集合(从不为空))
  • 有效(布尔值)

希望这可以帮助其他想要做类似事情的人!