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

时间:2013-01-22 20:16:09

标签: c# visual-studio-2010 visual-studio-debugging envdte visual-studio-extensions

是否可以捕获本地和调试窗口使用的调试数据,使用EnvDTE进行.vsix visual studio扩展?或者通过另一种方法可以吗?

我想创建一个自定义的Locals窗口,我们可以修改它以显示我们喜欢的一些更重的内容,而不会牺牲高级用户的原始Locals窗口。理想的解决方案是获取发送到本地窗口的数据,这样我就可以构建自己的树了。

1 个答案:

答案 0 :(得分:10)

事实证明这实际上非常简单!

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.
    }
}

每个表达式包含:

  • 名称(字符串)
  • (本地窗口中显示的字符串值)
  • 输入(类型的字符串名称)
  • (类型为父类型)
  • DataMembers (其子代的可迭代集合(永不为null))
  • IsValid (bool)

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