如何编写一个非常简单的Visual Studio调试器可视化工具?

时间:2012-04-23 17:08:31

标签: c++ visual-studio debugging debuggervisualizer

我正在尝试为字符串类型编写一个基于'autoexp.dat'的可视化工具。我已经缩减了我的野心,试图为一个包含以null结尾的字符串字段的非常简单的测试类型编写可视化器:

namespace thizz { namespace izz {
        class MyType {
            const char* _ptr;
        public:
            MyType(const char* ptr) : _ptr(ptr) {}
        };
    }
}

这是我对可视化工具的尝试,但它对Visual Studio(2010)如何显示此类型的实例没有影响:

thizz::izz::MyType
{
 preview ([$e._ptr,s])
}

(这是 C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ Packages \ Debugger \ autoexp.dat 中[Visualizers]部分的顶部。

观看此类型的实例:

thizz::izz::MyType t("testing testing");

只显示

t | {_ptr=0x0f56a6fc "testing testing" } | thizz::izz::MyType
在Watch窗口中。

2 个答案:

答案 0 :(得分:1)

要获得更多功能的查看器,请尝试更改以使用此功能:

thizz::izz::MyType {
preview ( #( [$e._ptr,s] ) )
stringview ( #( [$e._ptr,sb] ) )
}

这也将提供放大镜图标,如果你有一个更长的字符串,它将打开一个更大的文本视图窗口。它还为您提供了以HTML或XML格式呈现的选项。

请注意,除了对空格敏感的文件格式外,我还发现你不能在字符串中使用冒号,否则会产生解析错误。

调试器可视化器非常强大,但语法可能非常令人困惑。作为一般建议,我建议首先在[AutoExpand]部分创建一些条目,以总结您最感兴趣的数据类型,然后如果您有自定义容器,则复制并调整vector的示例, list等,这将为您提供最大的投资回报。

答案 1 :(得分:0)

我无法明确说明为什么我在autoexp.dat中的原始“代码”无法正常工作,但我发现当删除所有空格时,相同的代码都有效。

然后我尝试重新添加空格,发现保持第一行的初始开括号是保持定义工作所必需的。