bing.com搜索: autoexp.dat

参考资料:

AutoExp.dat

http://www.virtualdub.org/blog/pivot/entry.php?id=120

http://www.cnblogs.com/cutepig/archive/2010/08/12/1798079.html

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

http://cppblog.com/Streamlet/archive/2011/02/27/140742.html

http://blogs.msdn.com/b/dsvc/archive/2012/02/10/why-autoexp-dat-data-visualizer-entries-are-ignored-at-times.aspx

http://blog.csdn.net/qiudaowen/article/details/8054718

https://msdn.microsoft.com/en-us/library/aa730838(v=vs.80).aspx

从版本VS2012起, 比AutoExp.dat更好的方式 - Visualization Framework:

http://blogs.msdn.com/b/vcblog/archive/2012/07/12/10329460.aspx

https://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2#content

https://msdn.microsoft.com/en-us/library/jj620914.aspx

  @

备注: VS2013虽然支持了NATVIS, 但不支持把NATVIS文件包括到项目中去(以及生成到PDB文件中), VS2015支持这些功能.

为什么不像.NET或者JAVA那样调用toString?

  http://blogs.msdn.com/b/vcblog/archive/2013/06/28/using-visual-studio-2013-to-write-maintainable-native-visualizations-natvis.aspx

http://www.cnblogs.com/TianFang/p/3963406.html

http://blogs.msdn.com/b/mgoldin/archive/2012/06/06/visual-studio-2012-and-debugger-natvis-files-what-can-i-do-with-them.aspx

Debug java代码的时候eclipse会调用一个object的toString来获得其内容显示到debugger的窗口上, 这样就使得开发者调试的时候非常方便查看其想要的信息.

Visual Studio却采用的不是这个方法. 你如果写了一个class Box, VS 并不知道你Debug的时候对于Box object最希望展示的是什么信息, 所以你就得跟打开文件树一样, 展开 Box 对象才能看到内部信息.

比如说你的 class Box 定义如下

 class Box
{
int a;
char str[];
...
...
};

你在Debug的时候可能想直接看到str的内容, 而不是把Box object给展开才能看到. 最开始我一直以为展开是唯一的办法了, 最近接触了 Qt 突然发现 QString 在Debug窗口内直接展示的就是其内部string的内容,  我才知道原来这个是可以实现的. 上bing.com搜了一下 "visual studio customize debug window"终于搜到上面的blog. 这才知道原来有个叫AutoExp.dat的东西是专门用来定制你debug的时候想看到的东西(虽然没有toString那种方便, 聊胜于无啊!)

Qt 就是通过修改 AutoExp.dat 来实现更user-friendly的Debug信息的.

现在先做一个Demo来演示怎么使用AutoExp.dat来定制Debug显示的信息.

Box.h

 #pragma once
class Box
{
static unsigned int s_nInstance;
const char* m_name;
const unsigned int m_ID;
public:
Box();
~Box();
};

Box.cpp

 #include "Box.h"

 unsigned int Box::s_nInstance = ;

 Box::Box() :m_name("box"), m_ID(++s_nInstance)
{
} Box::~Box()
{
}

main.cpp

 #include "Box.h"

 int main()
{
Box b1, b2;
return ;
}

调试:

修改AutoExp.dat, 在 [Visualizer] 区域内添加代码:

 MyBox{
preview
(
#(
"[Name = ", $c.m_name, "ID = ", $c.m_ID, "]"
)
)
}

然后确保这个选项没有被勾选:

注意, VS2013不再使用AutoExp.dat了, 所以无论你怎么修改AutoExp.dat都不会起作用的, VS2013默认用natvis文件.(XML). Qt 也用的是 natvis文件 (比如Qt5用的就是qt5.natvis)

natvis文件的目录是:%VS_INSTALL_DIR%\Common7\Packages\Debugger\Visualizers

见:

http://blogs.msdn.com/b/vcblog/archive/2012/07/12/10329460.aspx

你需要做的就是写一个自己的 .natvis 文件并放到以下目录即可:

%VS_INSTALL_DIR%\Common7\Packages\Debugger\Visualizers

比如写一个 MyVisualizers.natvis , 内容如下 (模板是抄的该目录下现成的 .natvis 文件)

 <?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> <Type Name="MyBox">
<DisplayString>MyBox[{m_ID}]</DisplayString>
<Expand>
<Item Name="[m_name]">m_name</Item>
<Item Name="[m_ID]">m_ID</Item>
</Expand>
</Type> </AutoVisualizer>

然后把 MyVisualizers.natvis 放到该目录. 调试的时候如果遇到类型名为 MyBox 的就会按照 MyVisualizers.natvis 中定义的规则来显示调试信息

效果如图

至于这个XML文件的语法含义是什么可以借鉴该目录下的其他 .natvis 文件的内容作为例子 (不过我感觉因为缺少注释和文档还是有些细节不知道什么含义)

去看官方文档:

https://msdn.microsoft.com/en-us/library/jj620914.aspx

Visual Studio Debugger AutoExp.dat & Visualization Framework的更多相关文章

  1. Visual Studio Debugger中七个鲜为人知的小功能

    Visual Studio debugger是一个很棒的调试工具,可以帮助程序猿们快速地发现和解决问题.这里给大家简单介绍一下VS调试工具中的七个鲜为人知的小功能. 1.    一键跳转到指定语句 调 ...

  2. Visual Studio Debugger

    Visual Studio Debugger中七个鲜为人知的小功能   Visual Studio debugger是一个很棒的调试工具,可以帮助程序猿们快速地发现和解决问题.这里给大家简单介绍一下V ...

  3. Visual Studio 2015上安装Entity Framework Power Tools

    Entity Framework Power Tools是个非常好用的EF Code First插件.通过它能够非常简单地生成和数据库结构匹配的model和dbcontext代码.使用的方法,这里有介 ...

  4. Configure Visual Studio 2013 for debugging .NET framework

    https://referencesource.microsoft.com/ In order to configure Visual Studio 2013 do the following in ...

  5. 如何在 Visual Studio 2013 中调试.NET Framework 4.5.1 代码

    版本需求如标题,在 工具->选项->调试->常规 中,更改以下设置: 禁用:启用“仅我的代码”.逐过程执行属性和运算符(仅限托管).要求源文件与原始版本完全匹配 启用:启用 .NET ...

  6. visual studio 2010 C#编程时 没有.NET framework 2.0目标框架的解决办法

    解决办法是安装Framework .NET 3.5 Sp1 因为visual studio 2010是依赖.NET Framework 3.5 Sp1来识别其它版本的.NEt framework的. ...

  7. Visual Studio高级调试技巧

    1. 设置软件断点,运行到目标位置启动调试器 方法①:使用汇编指令(注:x64 c++不支持嵌入汇编) _asm 方法②:编译器提供的方法 __debugbreak(); 方法③:使用windows ...

  8. Visual Studio 2010/2013 UTF8编码调试时显示中文

    VisualStudio 2010 SP1环境 1.设置string默认编码为utf8,只需要在文件头部加入以下代码 #pragma execution_character_set("utf ...

  9. 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)

    前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modeling SDK进行领域特定语言(DSL)的开发,包括两个部分的内容.在第一部分中,将对 ...

随机推荐

  1. Hrbustoj 2252 完全背包

    一个变形的完全背包 题是第一次团队赛的热身题...看别人博客看到这道题忽然就不会了 然后想了半天还是没想出来...上oj找了提交排名..发现自己弄出来的奇怪的办法居然用时最短... 问装m最低要多少的 ...

  2. PHP 命名空间总结

    PHP 5.3 及以上版本中引入了命名空间 的概念. notes: 1. 在 PHP 中,命名空间用来解决在编写 类库 或 应用程序 时创建 可重用 的 代码如 类 或 函数 时碰到的两类问题: ① ...

  3. json解析json字符串时候,数组必须对应jsonObjectArray,不能对应JsonObject。否则会解析错误。

    json第三方解析json字符串时候,json数组必须对应jsonObjectArray,不能对应JsonObject.->只要是[]开头的都是json数组字符串,就要用jsonArray解析 ...

  4. PHP正则表达式及实例

    PHP正则表达式及实例 博客分类: Php / Pear / Mysql / Node.js 正则表达式PHPWordPressFPApache  关联: 正则表达式 去除连续空白 + 获取url + ...

  5. 使用无限生命期Session的方法

    使用无限生命期Session的方法 [来源] 达内    [编辑] 达内   [时间]2013-03-28 Session储存在服务器端,根据客户端提供的SessionID来得到这个用户的文件,然后读 ...

  6. td的cellIndex属性被style.display改变

    IE7下面td的cellIndex属性,居然会随着style.display='none'的设置而改变,真是太恶心了

  7. BlueDroid代码分析之GKI

    目录 1. 概述 2. 线程 2.1 主要函数 2.2 功能 3. 事件 3.1 主要函数 3.2 功能 1. 概述 GKI以库libbt-brcm_gki.so(Static Lib?)的形式提供给 ...

  8. FTS抓包看蓝牙验证的过程

    1.概述    在进行蓝牙设备的连接时,为了保护个人隐私和数据保密的需要,需要进行验证.   2.一些Frame Frame74:本地发送Authentication requset command ...

  9. 【摘自网络】陈奕迅&&杨千嬅

    揭陈奕迅杨千嬅相爱18年恋人未满的点滴片段 文/一床情书 但凡未得到,但凡是过去,总是最登对 ——题记 已经仙逝多年的香港歌坛天后梅艳芳曾经在<似是故人来>里唱道:“但凡未得到,但凡是过去 ...

  10. Apache的HBase与cdh的hue集成(不建议不同版本之间的集成)

    1.修改hue的配置文件hue.ini [hbase] # Use full hostname with security. hbase_clusters=(Cluster|linux-hadoop3 ...