`
yaogangshi
  • 浏览: 74186 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

VS高级使用方法1:autoexp.dat使用Visual studio在debug时显示变量内容

阅读更多

使用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
        )
    )
}
  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的结构,用来显示层次化的数据结构

附上一个今天做的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]
        )
    )
}

 

参考:

  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

 

  • 大小: 80.1 KB
分享到:
评论

相关推荐

    VS调试利器autoexp.dat

    VS调试利器,可以查看调试时看不到的值,使用方法(以VS2010为例): 1:替换到Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger  2:重启visual studio

    autoexp.dat

    VS调试状态下查看QString等QT变量,修改的Common7\Packages\Debugger\autoexp.dat文件

    Spark统计电影评分数据:movies.dat,retings.dat,users.dat

    在IT领域,尤其是在大数据分析和处理中,Apache Spark是一个广泛使用的分布式计算框架。这个场景涉及到对电影评分数据的统计分析,我们主要会关注三个文件:`movies.dat`, `ratings.dat`, 和 `users.dat`,这些文件...

    system.new.dat与system.new.dat.br互转工具

    在Android系统中,`system.new.dat` 和 `system.new.dat.br` 文件是非常关键的部分,它们关系到设备的刷机过程。这两个文件都是Android系统映像的一部分,用于存储系统的应用程序、设置和其他必要的数据。在此,我们...

    SYSTEM.NEW.DAT解包工具(可解5.0-8.0系统)

    在Android系统中,`SYSTEM.NEW.DAT`是一个重要的系统文件,它包含了系统的各种核心组件、设置和应用程序。这个文件通常是经过打包处理的,以便于在设备上高效地存储和分发。本文将深入探讨`SYSTEM.NEW.DAT`的结构、...

    system.new.dat.br和system.new.dat解包工具

    在Android系统中,"system.new.dat.br" 和 "system.new.dat" 文件是刷机过程中常见的文件格式,尤其在MIUI等定制系统中尤为常见。这些文件通常包含系统的核心组件和应用,是Android设备升级或恢复时的重要部分。本文...

    shell.dat生成专用器

    4. **编程接口(API)**:生成shell.dat文件可能需要使用特定的API,尤其是当需要动态生成或修改文件内容时。例如,通过编程语言如Python、C#或VBScript,可以调用系统API来创建和写入shell.dat文件。 5. **安全性...

    修复MSDN的hhcolreg.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\...

    shell.dat生成器

    不正确的配置或被恶意修改可能导致命令注入攻击,因此在使用生成器时,要确保了解并审查生成的文件内容,避免引入潜在的安全漏洞。 6. **创建和编辑**:`shell.dat` 文件通常使用文本编辑器创建和编辑,如Vim、Nano...

    LineageOS(system.new.dat.br)镜像解包.zip

    在更新或自定义设备的系统时,我们可能会遇到`system.new.dat.br`这样的文件,它是LineageOS系统镜像的一个部分。这个文件通常包含系统分区的数据,如应用程序、系统设置和库等。 在进行系统解包时,`system.new....

    GeoIP.dat.gz和GeoLiteCity.dat.gz.rar

    综上所述,GeoIP.dat.gz和GeoLiteCity.dat.gz是用于IP定位的重要工具,常与Nginx结合使用,以提升Web服务的功能性和安全性。不过,随着数据服务政策的变化,用户需要寻找新的获取和使用方式,同时关注数据隐私和合规...

    GeoIPISP.dat文件(压缩包)

    在使用这些数据时,必须遵守相关法律法规,确保数据处理的合法性。 8. 兼容性:GeoIPISP.dat文件可能与其他GeoIP产品(如GeoLite或GeoIP City数据库)一起使用,以获取更全面的地理位置信息。 综上所述,GeoIPISP....

    visual studio c++HLSL 用户关键字包

    使用方法: 1.建立名字叫做"usertype.dat"的纯文本文件, 把以下关键字Copy到里面,一个关键字一行. 2.把此文件放到和VS IDE同目录下.(..\Microsoft Visual Studio X.0\Common7\IDE\) 3.打开VS, TOOL-&gt;OPTION-...

    NL_QQwry.rar_NL_QQwry_QQWry_QQwry.dat_site:www.pudn.com

    1. **打开QQWry.dat文件**:类库提供了打开QQWry.dat文件的函数,通过文件指针或者其他I/O流方式,确保能够正确读取数据。 2. **IP地址到索引的查找**:首先,NL_QQwry会根据输入的IP地址,采用二分查找法在QQWry....

    system.new.dat解包打包

    1. **备份**:在操作前,确保对原始`system.new.dat`文件进行备份,以防出现错误时能恢复到初始状态。 2. **准备工具**:使用特定的工具,如`system.new.dat`的解包工具。在这个例子中,我们提到的“7.1.1 tools ...

    GeoIP.dat__GeoLitecity.rar

    GeoLiteCity.dat.gz和GeoIP.dat.gz是这两个数据库的GZIP压缩版本,它们可以节省存储空间,但在使用前需要先解压。解压后,Nginx的GeoIP模块可以通过配置文件来指定这些数据库的位置,从而在处理请求时动态查询IP地址...

    face_landmark_model.dat

    通过实例化Facemark对象,加载"face_landmark_model.dat",然后调用其检测方法,即可在输入图像上找到并返回面部地标坐标。 7. **注意事项**:在编译过程中,确保所有依赖项都已安装且版本匹配,否则可能会遇到编译...

    GeoIP.dat,qqhostinfo.pm、qqwry.pl、QQWry.dat3 打包下载

    GeoIP.dat、qqhostinfo.pm、qqwry.pl和QQWry.dat3是与网络地理定位和网站统计分析相关的文件。这些文件在IT领域中扮演着重要的角色,特别是在服务器管理和网络安全监控方面。以下是对这些文件及其用途的详细解释: ...

Global site tag (gtag.js) - Google Analytics