【问题标题】:Capture VS local variables while debugging in EnvDTE在 EnvDTE 中调试时捕获 VS 局部变量
【发布时间】:2013-01-22 20:16:08
【问题描述】:

是否可以将 EnvDTE 用于 .vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据?还是可以通过其他方法实现?

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

【问题讨论】:

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


    【解决方案1】:

    原来这其实很简单!

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

    每个表达式包含:

    • 名称(字符串)
    • (本地窗口中显示的字符串值)
    • 类型(类型的字符串名称)
    • Parent(类型为父类型)
    • DataMembers(其子项的可迭代集合(从不为空))
    • IsValid(布尔型)

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

    【讨论】:

    • 还有一件事。请注意如何向下查看成员树,因为在许多情况下类型可能会形成无限引用循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多