使用VS2008进行调试时,有些变量显示不够直接,需要一层一层的展开才能得到直观的变量内容。虽然不难,但是很影响效率。我们可以通过修改autoexp.dat来修改变量在debug Visualizer的显示。
第一步,打开调试时对变量进行Auto Expand功能
第二步,很关键,也是本文关注的重点。autoexp.dat文件在 VS的安装目录Common7\Packages\Debugger\autoexp.dat中。
autoexp.dat实际是一个ini,要编辑autoexp.dat,可以通过添加变量类型到段[Visualizer]下。
可视化变量调试窗口有三种类型的视图,预览(preview)视图,字符串(stringview)视图和子(children)视图。
比如QString
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
)
)
}
- 需要新增类型 *::QString表示通配带名字空间QtCore::QString。QString则精确匹配QString
- 大括号需要与类型在同一行,这一点一定要注意,不要换行
- 接下来据是三种视图,三种视图都是可选。视图内容必须用()包起来,不可省略。视图内的语法参见语法部分。
第三步,编辑完成,保存,启动调试。autoexp.dat就会自动加载。注意,不需要重启VS,只需要重新运行调试即可。
语法知识,个人总结的,因为得到官方的介绍:
- $e,$c是预先定义,表示是传给变量可视化调试器的值。用$e和$c都可以,没有区别。但是$c一般都用在container上。
- $i是用在#array语句中的一个局部变量,使用了#array后会使用size表达式自动迭代$i
- 分支语句#if #else:语句必须使用括号包起来,不能省略
- 井号(#)语句:个人理解是一个串接语句,计算每一个在#('zz',$e.d,3)的变量,然后转为字符串,并串接起来。
- #array:显示container的内容。需要提供expr和size表达式。expr就是每一个元素的内容,size就是总共显示多少个元素
- 通配符(*)的使用:通配符经常用于名字空间通配和模板匹配,匹配上之后,会产生$T1,$T2...之类的类型或者名字空间。类型可以用来做类型转换。比如*::QList<*>匹配上QCore::QList<int>后$T1就是QCore,$T2就是int类型
- 类型转换:通配到类型后可以使用C格式的强制转换。
- 注释:只看到单行注释方式,使用分号(;)
- 还有一种#tree的结构,用来显示层次化的数据结构
附上一个今天做的boost::optional的auto expand描述
boost::optional<*> {
preview
(
#if ($e.m_initialized == false)
(
#("m_initialized = ",$c.m_initialized)
)
#else
(
#("m_initialized = ",$c.m_initialized,
"; value = ", *($T1*)($c.m_storage.dummy_.data))
)
)
children
(
#if ($e.m_initialized == false)
(
#(
[initialized] : $c.m_initialized,
[raw member]: $c.m_storage.dummy_
)
)
#else
(
#(
[initialized] : $c.m_initialized,
[value] : *($T1*)($c.m_storage.dummy_.data),
[raw member]: $c.m_storage.dummy_
)
)
)
}
再来一个QUrl的例子
QUrl|*::QUrl{
preview
(
#( "path=",[(char*)(((QString*)((int)($e.d)+0x20))->d->data),s])
)
children
(
#(
[scheme]: (wchar_t*)(((QString*)((int)($e.d)+0x4))->d->data),
[host]: (wchar_t*)(((QString*)((int)($e.d)+0x10))->d->data),
[path]: (char*)(((QString*)((int)($e.d)+0x20))->d->data),
[username]: (wchar_t*)(((QString*)((int)($e.d)+0x8))->d->data),
[password]: (wchar_t*)(((QString*)((int)($e.d)+0xc))->d->data),
encodedOriginal: $c.d->encodedOriginal,
[query]: (char*)(((QString*)((int)($e.d)+0x18))->d->data),
fragment: $c.d->fragment
)
)
}
QByteArray使用utf8的例子
QByteArray|*::QByteArray{
preview ([$e.d->data,s8])
stringview ([$e.d->data,s8])
children
(
#(
d: $c.d,
[size]: $c.d->size,
[referenced]: $c.d->ref._q_value,
[utf16]: [(wchar_t*)($c.d->data),su],
[ascii]: [$c.d->data,s]
)
)
}
参考:
- autoexp.dat入门http://www.thecodeway.com/blog/?p=924
- visual studio的安装目录D:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat
- Qt定义的autoexp.dat http://code.google.com/p/geneviz/source/browse/trunk/tools/visual+studio/autoexp.dat-qt?r=698
- 基于CLR的语言可以参考http://msdn.microsoft.com/en-us/library/x810d419%28VS.90%29.aspx
- 扩展可视化调试变量窗,参考http://msdn.microsoft.com/en-us/library/e2zc529c%28VS.90%29.aspx
- boost提供的可视化调试变量文件https://svn.boost.org/trac/boost/wiki/DebuggerVisualizers
-
http://blogs.msdn.com/b/vcblog/archive/2006/08/04/689026.aspx
- 大小: 80.1 KB
分享到:
相关推荐
VS调试利器,可以查看调试时看不到的值,使用方法(以VS2010为例): 1:替换到Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger 2:重启visual studio
Spark统计电影评分数据:movies.dat,retings.dat,users.dat
VS调试状态下查看QString等QT变量,修改的Common7\Packages\Debugger\autoexp.dat文件
Can't Open C:\Program Files\Microsoft Visual Studio\MSDN\2001OCT\1033\MSDN130.COL 使用方法: (1) hhcolreg.dat文件拷贝至如下目录下: C:\Documents and Settings\All Users\Application Data\Microsoft\...
使用方法: 1.建立名字叫做"usertype.dat"的纯文本文件, 把以下关键字Copy到里面,一个关键字一行. 2.把此文件放到和VS IDE同目录下.(..\Microsoft Visual Studio X.0\Common7\IDE\) 3.打开VS, TOOL->OPTION-...
system.new.dat与system.new.dat.br互转工具
GeoLiteCity.dat.gz和GeoIP.dat.gz ,好像官网无法下载了
现在的第三方安卓8.1rom里面的system.new.dat.br,怎么转成原来的system.new.dat 2015年9月, Google就已经在官方博客上发布了新的压缩算法Brotli, 并开源在了Github上.同时还发布了一个研究报告, 対Brotli, ...
支持system.new.dat与system.new.dat.br互相转换功能,同样也支持vendor.new.dat与vendor.new.dat.br互相转换,操作十分简单,只需一键就能转换。也支持img与dat一键互换,安卓全版本适配。
支持解压Android 8.1~9.0新增的br格式刷机包,同时继承了dat解包工具,方便同时解压system.new.dat文件
1. 创建或编辑usertype.dat文件(此文件在VS安装目录下的Common7\IDE下面,比如我的就在D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\usertype.dat),添加如下的关键字列表,每个单词占一行,如果你想...
.turing.dat
在Java中想要使用这个数据文件需要下载相应的Jar包和dat文件: GeoIP jar包:geoip-api-1.3.1.jar Geo city dat文件:GeoLiteCity.dat 把dat文件放在自己的本地目录,然后项目中导入geoip.jar即可: import ...
system.new.dat.br解包打包工具,使用方法 brotli.exe -h
来自6000用户对4000多部电影的超100万条评论数据 MovieLens 1M Dataset Stable benchmark dataset. 1 million ratings from 6000 users on 4000 movies. Released 2/2003.
开始时slist.dat为空,通过逐条插入学生记录,建立有序的学生成绩记录,并存放在slist.dat中。 /* 单链表建立、插入、删除、查找、字符串比较、排序等操作。学会对文件操作和单链表一起使用。*/ 主函数中至少有如下...