【调试】Visual Studio 调试小技巧(2)-从查看窗口得到更多信息(转载)
在使用Visual Studio开发调试程序时,我们经常需要打开查看窗口(Watch)来分析变量。有时在查看窗口显示的内容不是很直观。为了能从查看窗口的变量中得到更多的信息,我们需要一些小的技巧。下面是几个例子。
1. Windows消息
在开发调试界面程序时,我们经常需要查看消息的内容。当在查看窗口中,仅仅只显示出消息对应的整数值,我们并不能直观地知道究竟是什么消息。比如:
为了能让查看窗口显示出消息内容,我们只需要在变量名添加“, wm”的格式化后缀,就能显示消息的名字:
2. 句柄返回值
Windows有很多API返回一个HANDLE类型的值来表示操作是否成功。当操作失败时,返回一个特定的值来表示操作失败的原因。通常我们不可能记住所有的错误代码对应的失败类型。比如在下面的例子中,我们就不一定能看出0x80070005表示的错误原因:
为了能方便我们从句柄的错误代码中直观地发现出错原因,Visual Studio在查看窗口中提供了一个“, hr”后缀。在变量名后添加该后缀,查看窗口就能显示出具有可读性的信息。比如,我们在上述返回值后添加“, hr”之后,就能得到:
从这个句柄值的名字看来,很有可能是访问权限出问题了。
3. 错误代码
Windows 中有很多API在操作失败时,会设置一个错误代码,程序员可以调用函数GetLastError得到该错误代码。在调试时,如果代码中没有调用GetLastError,那么我们就不能很方便地得到给错误代码。
由于这个错误代码是设置在一个叫$ERR的寄存器里。我们可以在查看窗口中显示出该寄存器的值从而得到错误代码。例如,我们运行如下代码:
HANDLE hFile = CreateFile(_T("temp2.txt"), GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
如果我们之前没有新建temp2.txt这个文件,那么我们就能得到如下的错误代码:
我们可能不能从错误代码0x0002看出出错的原因。有了前面句柄的经验,我们可以在后面添加“, hr”后缀,此时查看窗口显示为:
现在我们就知道出错的原因是系统不能找到文件。
4. 数组
数组是我们使用最为频繁的一种数据结构。但当数组是以一个指针和其长度来表示时,查看窗口并不能直观地显示出数组中每个元素的值,而只能显示出该数组的起始地址以及它的第一个元素。下面就是一个例子:
为了显示出数组中所有元素的内容,我们可以在数组名的后面添加一个“, #”(#表示数组的长度)。如果我们在上面的数组名添加该后缀名就得到:
【调试】Visual Studio 调试小技巧(2)-从查看窗口得到更多信息(转载)的更多相关文章
- 调试 - Visual Studio调试
Visual Studio - 调试 异常处理机制 windows预定义了一系列的异常错误码,每种程序异常都有一个对应的错误码,windows系统将这些类似键值对关系的数据存储在异常处理表中(称为SE ...
- Visual Studio常用小技巧一:代码段+快捷键+插件=效率
用了visual studio 5年多,也该给自己做下备忘录了.每次进新的组换新的电脑,安装自己熟悉的环境又得重新配置,不做些备忘老会忘记一些东西.工具用的好,效率自然翻倍. 1,代码段 在Visua ...
- Visual Studio实用小技巧
有一个有关微软Office的笑话,说的是它的特性太多: 当你觉得自己发现了一个Office的新特性时,它已经存在很多年了. 本文将介绍一些在Visual Studio(免费下载)中很实用却被忽略的小技 ...
- visual studio 一些小技巧 整理
本博客将会陆续的整理一些作者在实际开发中的一些小技巧,一些挺有意思的东西,将会持续更新, 如果有问题,可以加群讨论,QQ群:592132877 #warning的使用 #warning 的意思是在程序 ...
- 设置visual studio的小技巧
设置 Visual Studio 方法 1.设置关闭快捷键 Ctrl + W:关闭当前文档窗口 Ctrl + Q:关闭所有文档窗口 设置方法:工具-->选项-->键盘:在显示命令包含中输入 ...
- Visual Studio 调试小技巧-从查看窗口得到更多信息(转)
原文地址:http://blog.csdn.net/cadcisdhht/article/details/5651488
- Visual Studio 2013小技巧
Ctrl + F10 可以直接运行到光标处,而不用F10 逐过程 F11 逐语句了 当有多个断点时,按F5可以切换到下一个断点.
- Visual Studio 调试(系列文章)
调试是软件开发过程中非常重要的一个部分,它具挑战性,但是也有一定的方法和技巧. Visual Studio 调试程序有助于你观察程序的运行时行为并发现问题. 该调试器可用于所有 Visual Stud ...
- Visual Studio 调试 ---- 系列文章
调试是软件开发过程中非常重要的一个部分,它具挑战性,但是也有一定的方法和技巧. Visual Studio 调试程序有助于你观察程序的运行时行为并发现问题. 该调试器可用于所有 Visual Stud ...
随机推荐
- Java 线程池 +生产者消费者+MySQL读取300 万条数据
1.1需求 数据库300 万条用户数据 ,遍历获取所有用户, 各种组合关联, 获取到一个新的json ,存到redis 上. 1.2 难点 数据库比较多, 不可能单线程查询所有的数据到内存. 1.3解 ...
- SpringCloud是如何运行的?
SpringCloud是基于SpringBoot这一高度自动化的应用开发框架,将各类业界比较知名的.得到过实践反馈的开元服务治理相关的技术框架进行优化整合的框架,是一种开发方式的优化和组合,,是一组框 ...
- Nginx与PHP工作原理
Nginx的工作原理 1.Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location bl ...
- mysql 登录的时候设置编码 utf8
很多时候 导入sql 的时候需要命令行导入 但是有的时候容易出现乱码 因为字符集的问题 所以 尽量在登录的时候就设置编码 就不容易出错了 例如: mysql -uroot -p –default-ch ...
- 干货来了!2019阿里云合作伙伴峰会SaaS加速器专场回顾合集:嘉宾分享、深度解读
2019年7月26日,在上海举办的阿里云合作伙伴峰会上,阿里云正式发布SaaS生态战略,计划用阿里云的品牌.渠道.资本.方法论.技术加持伙伴,成就亿级营收独角兽. 该生态战略计划招募10家一级SaaS ...
- TZ_02MyBatis_一级缓存和二级缓存
1.Mybatis中的缓存 1>什么是缓存 存在于内存中的临时数据. 2> 为什么使用缓存 减少和数据库的交互次数,提高执行效率. 3>什么样的数 ...
- IOS下的 click 点击失效
当委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. demo: & ...
- 元素 XXXX 的前缀 "mvc" 未绑定
这个问题是由于spring-servlet配置不全 在上边部分添加一句 xmlns:mvc="http://www.springframework.org/schema/mvc" ...
- 大数据概念(4V)
- Linux监听的网络服务$ netstat -ntlp$ netstat -nulp$ netstat -nxlp
我一般都分开运行这三个命令,不想一下子看到列出一大堆所有的服务.netstat -nalp倒也可以.不过我绝不会用 numeric 选项 (鄙人一点浅薄的看法:IP 地址看起来更方便). 找到所有正在 ...