Autoexp.dat

使用VS2008进行调试时,有些变量显示不够直接,需要一层一层的展开才能得到直观的变量内容。虽然不难,但是很影响效率。我们可以通过修改autoexp.dat来修改变量在debug Visualizer的显示。

 

第一步,打开调试时对变量进行Auto Expand功能


 

第二步,很关键,也是本文关注的重点。autoexp.dat文件在 VS的安装目录Common7\Packages\Debugger\autoexp.dat中。

 

autoexp.dat实际是一个ini,要编辑autoexp.dat,可以通过添加变量类型到段[Visualizer]下。

 

可视化变量调试窗口有三种类型的视图,预览(preview)视图,字符串(stringview)视图和子(children)视图。

例如:
MyClass {
 
preview
 
(
  #
(
  
" [count is " , $ c . size , " ] " ,
  
" (buf " ,
    #array
    
(
    
expr : $ c . buf [ $ i ] ,
    
size : $ c . size
    
) : $ e ,
  
" ) " ,
  
" (odd " ,
   #array
  
(
    
expr : $ c . buf [ $ i ] ,
    
size : $ c . size
  
) : $ e & 1 ,
  
" ) "
 
)
 
)
}

    实际显示效果为:

    其中,$c表示当前所定义数据结构,#array表示用数组形式显示内容,$i表示数组中的每个元素的索引,$e表示每个元素的值,同样,可以用#tree和#list分别用来显示树形数据结构和链表类型的数据结构。

 

比如QString

Java代码 复制代码  收藏代码
  1. QString|*::QString{   
  2.     preview         ( [$e.d->data,su])   
  3.     stringview      ([$e.d->data,sub])   
  4.     children   
  5.     (   
  6.         #(   
  7.             d: $c.d,   
  8.             [size]: $c.d->size,   
  9.             [referenced]: $c.d->ref._q_value   
  10.         )   
  11.     )   
  12. }  
QString|*::QString{
    preview         ( [$e.d->data,su])
    stringview      ([$e.d->data,sub])
    children
    (
        #(
            d: $c.d,
            [size]: $c.d->size,
            [referenced]: $c.d->ref._q_value
        )
    )
}
  1. 需要新增类型 *::QString表示通配带名字空间QtCore::QString。QString则精确匹配QString
  2. 大括号需要与类型在同一行,这一点一定要注意,不要换行
  3. 接下来据是三种视图,三种视图都是可选。视图内容必须用()包起来,不可省略。视图内的语法参见语法部分。

第三步,编辑完成,保存,启动调试。autoexp.dat就会自动加载。注意,不需要重启VS,只需要重新运行调试即可。

语法知识,个人总结的,因为得到官方的介绍:

  1. $e,$c是预先定义,表示是传给变量可视化调试器的值。用$e和$c都可以,没有区别。但是$c一般都用在container上。
  2. $i是用在#array语句中的一个局部变量,使用了#array后会使用size表达式自动迭代$i
  3. 分支语句#if #else:语句必须使用括号包起来,不能省略
  4. 井号(#)语句:个人理解是一个串接语句,计算每一个在#('zz',$e.d,3)的变量,然后转为字符串,并串接起来。
  5. #array:显示container的内容。需要提供expr和size表达式。expr就是每一个元素的内容,size就是总共显示多少个元素
  6. 通配符(*)的使用:通配符经常用于名字空间通配和模板匹配,匹配上之后,会产生$T1,$T2...之类的类型或者名字空间。类型可以用来做类型转换。比如*::QList<*>匹配上QCore::QList<int>后$T1就是QCore,$T2就是int类型
  7. 类型转换:通配到类型后可以使用C格式的强制转换。
  8. 注释:只看到单行注释方式,使用分号(;)
  9. 还有一种#tree的结构,用来显示层次化的数据结构
参考:
  1. autoexp.dat入门http://www.thecodeway.com/blog/?p=924
  2. visual studio的安装目录D:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat
  3. Qt定义的autoexp.dat http://code.google.com/p/geneviz/source/browse/trunk/tools/visual+studio/autoexp.dat-qt?r=698
  4. 基于CLR的语言可以参考http://msdn.microsoft.com/en-us/library/x810d419%28VS.90%29.aspx
  5. 扩展可视化调试变量窗,参考http://msdn.microsoft.com/en-us/library/e2zc529c%28VS.90%29.aspx
  6. boost提供的可视化调试变量文件https://svn.boost.org/trac/boost/wiki/DebuggerVisualizers
  7. http://blogs.msdn.com/b/vcblog/archive/2006/08/04/689026.aspx

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值