小编Vic*_*ter的帖子

使用autoexp.dat和DLL扩展Visual Studio 2003 C++调试器

我知道解决方案是使用VS 2005或2008,但目前不是一个选项.我应该编写VS 2003 C++调试器的扩展,以改进它在监视窗口中显示数据的方式.我使用DLL而不仅仅是基本的autoexp.dat功能的主要原因是我希望能够有条件地显示内容.即我想能够说"如果名称成员不是空字符串,显示名称,否则显示[其他成员]"

我无法在网上找到很多文档,无论是来自MS还是其他曾经使用过(或试图使用)VS 2003这一部分的人.MSDN EEaddin示例是一个不错的开始,但非常基本,并没有真正帮助我获得非常远.

到目前为止,我只是在学习如何解决它,学习如何显示各种类型,而不知道到底我将采用哪种类型.

我已经管理(通过大量试验和错误)来获取DLL以显示指向基本类型的成员,字符串成员,指向用户定义类型的成员和auto_ptr <int>成员.目前我无法显示矢量成员和auto_ptr <string>成员.

(我发现一个页面说auto_ptrs已被弃用,但我需要能够正确显示它们,因为它们在我的扩展名所用的代码中使用.)

我的问题是:有没有人做过这种事情,你有没有或知道一些有关这个问题的有用文件?

谢谢!

[更新:]我已经解决了为什么我遇到auto_ptr <string>类成员的问题.这是因为字符串类的实现方式.它有一个char [16]缓冲区,用于存储短字符串的数据;如果字符串长度超过(15个字符+终止字符),则为char*指针.我不确定是否有可能并且值得尝试破解它以显示更长的字符串(我可以显示足够短的字符串以保存在char [16]缓冲区中)

c++ debugging visual-studio

3
推荐指数
1
解决办法
993
查看次数

std :: vector visualizer在std :: vector <boost :: variant>上无法正常工作

如果我有一个,VS2008 autoexp.dat文件中的visual studio std :: vector visualizer似乎不起作用std::vector<boost::variant<...>>.它不会对其他类型的载体工作,我曾尝试(例如std::vector<int>,std::vector<boost::shared_ptr<..>>)

这是可视化代码:

std::vector<*>{
children
(
    #array
    (
        expr :      ($e._Myfirst)[$i],
        size :      $e._Mylast-$e._Myfirst
    )
)
preview
(
    #(
        "[", $e._Mylast - $e._Myfirst , "](",
        #array
        (
            expr :  ($e._Myfirst)[$i],
            size :  $e._Mylast-$e._Myfirst
        ),
        ")"
    )

)
}
Run Code Online (Sandbox Code Playgroud)

预览显示,而不是显示项目数和项目值

{_Myfirst= _Mylast= _Myend= }
Run Code Online (Sandbox Code Playgroud)

而应该是矢量项的子项是实际的矢量成员.就好像std :: vector visualizer不存在一样.

我拍了一下观察窗的截图.您可以看到它显示std::vector<boost::variant<int, std::string>>错误的方式,然后正确显示下两个向量:超链接到屏幕截图

有谁知道是什么导致这种情况以及如何阻止它发生?

谢谢!

c++ debugging boost visual-studio

0
推荐指数
1
解决办法
1000
查看次数

标签 统计

c++ ×2

debugging ×2

visual-studio ×2

boost ×1