转载:http://www.cppblog.com/flyinghare/archive/2010/09/27/127836.html

autoexp.dat入门(调试时自定义变量显示)

VC在调试状态下,会以三种方式显示一个变量的内容,分别是preview, childrenstringview,例如下图所示,定义一个std::string类型的变量,鼠标悬停后显示的内容就是preview,children是点击”+”符号后显示的内容,而对于含有字符串内容的变量,点击上放大镜符号,会弹出单独的窗口内显示其中的字符串内容。

  针对这部分功能,微软提供给开发者一个自定义接口,就是通过修改autoexp.dat这个看起来其貌不扬的小文件,该文件放在“$(VSINSTALLDIR)\Common7\Packages\Debugger”目录下,微软并没有提供关于这个文件的说明文档,只是在这个文件开始的地方有一些简单的说明,好在这个文件的结构并不复杂,通过分析现成的例子,大概也能了解个八九不离十。
    先以一个例子说明如何使用这个文件,打开这个文件,在”[Visualizer]“这一行下面添加下面的内容

MyClass{
preview
(
        #(
"Hello,World!"
)
)
}

然后启动VS, 随便定义一个名字为MyClass的类,当使用VS的调试器查看这个类的内容时,你会发现显示的调试内容已经变成了”Hello,World!”

下面我们再来看一个稍微复杂的例子,比如一个自定义的数组类

struct MyClass
{
int size[32];
int* buf;
};

    调试这个数据结构的时候,我们想显示这个数组的元素个数,每个元素的值,以及每个元素的奇偶性,那么需要这样定义:

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分别用来显示树形数据结构和链表类型的数据结构。
    autoexp.dat中已经对VC提供的缺省的STL数据结构做了定义,比如vector,map等,通过分析这些定义,还可以挖出很多有趣的功能,比如用#if/#else/#switch/#case等条件判断功能,在处理一些比较复杂的组合类型的数据结构时,就非常有用。

【转载】调试利器 autoexp.dat的更多相关文章

  1. Visual Studio Debugger AutoExp.dat & Visualization Framework

    bing.com搜索: autoexp.dat 参考资料: AutoExp.dat http://www.virtualdub.org/blog/pivot/entry.php?id=120 http ...

  2. linux-c/c++调试利器gdb、ddd小试

    linux-c/c++调试利器gdb.ddd小试 原文链接: http://deepfuture.iteye.com/blog/749148 博客分类: C++/C/lisp CC++C#LinuxU ...

  3. 【测试工具】http协议调试利器fiddler使用教程

    转自:http协议调试利器fiddler使用教程http://bbs.phpchina.com/thread-207418-1-1.html Fiddler真乃神器!它和市面上常见的很多web调试器. ...

  4. 前端调试利器——BrowserSync

    此处记录一下踩过的坑 之前看的这个地址:http://www.browsersync.cn/ 也就是 BrowserSync的官网上面关于代理服务器的例子不管怎么试都不行 请看下例子 browser- ...

  5. Reveal1.5破解,iOS_UI调试利器Reveal最新版本破解方法

    Reveal1.0.7破解 1.官网下载最新版Reveal,拖动应用程序中,运行一次2.下载16进制编辑器"0xED" for mac(http://dl.vmall.com/c0 ...

  6. Windows GUI代码与Windows消息问题调试利器

    Windows GUI代码与Windows消息问题调试利器 记得很久前有这么一种说法: 人类区别于动物的标准就是工具的使用.同样在软件开发这个行业里面,对于工具的使用也是高手和入门级选手的主要区别,高 ...

  7. 手机H5 web调试利器——WEINRE (WEb INspector REmote)

    手机H5 web调试利器--WEINRE (WEb INspector REmote) 调试移动端页面,优先选择使用chrome浏览器调试,如果是hybrid形式的页面,可以使用chrome提供的ch ...

  8. Javascript 调试利器 Firebug使用详解

    Javascript 调试利器 Firebug使用详解 有时候,为了更清楚方便的查看输出信息,我们可能需要将一些调试信息进行分组输出,那么可以使用console.group来对信息进行分组,在组信息输 ...

  9. dubbo服务接口开发者必备调试利器,你值得拥有

    dubbo服务接口开发者必备调试利器,你值得拥有 学习了:https://my.oschina.net/vboxtop/blog/1524290 找到了:http://www.vbox.top/?fr ...

随机推荐

  1. Flume_使用

    案例一: source:hive.log channel: memory  sink: logger输出 拷贝一份flume-conf.properties.template改名为hive-mem-l ...

  2. Android 四大护法之一 Service

    1.Service的概念 Service是Android 四大组件之一,是默认没有界面的运行于后台的服务程序.Service的开启方式分为启动式服务(startService)和绑定式服务(bindS ...

  3. Android四大组件--ContentProvider详解(转)

    一.相关ContentProvider概念解析: 1.ContentProvider简介在Android官方指出的Android的数据存储方式总共有五种,分别是:Shared Preferences. ...

  4. JavaScript自学之数组排序

    <html> <head> <title>数组排序</title> <script type="text/javascript" ...

  5. iOS用的aes

    http://files.cnblogs.com/files/n1ckyxu/NickyAesTool.zip 使用方法 #define encryptKey @"你的加密密码" ...

  6. jiajianhao

    #include<stdio.h> int map[4][4]={ 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0}; int flag=0; int minci=9 ...

  7. js获取modelandview的值

    JS当中不能接收ModelAndView的返回值吗?一定要在JSP页面中才能接收吗? 1 方法一 [有效?] 可以的,跟el表达式访问方式一样. 示例代码,一个数据展示请求的Action中存入一个us ...

  8. Redis学习笔记(3)-Hash

    package cn.com; import java.util.HashMap; import java.util.List; import java.util.Map; import java.u ...

  9. JavaScript第一天 改变DIV的样式

    onmouseover 当鼠标移到这个对象之上时响应 onmouseout 当鼠标移出这个对象之上时响应 document.getElementById('id')   获取id的元素并可以做一些操作 ...

  10. CSS之伪元素

    1. :first-line 向元素的首行文本添加样式,不必关心首行是元素节点还是文本节点 <style> body,htm,div,p{ margin:0; padding:0; } d ...