新手必备!11个强大的 Visual Studio 调试技巧
简介
调试是软件开发周期中很重要的一部分。它具有挑战性,同时也很让人疑惑和烦恼。总的来说,对于稍大一点的程序,调试是不可避免的。最近几年,调试工具的发展让很多调试任务变的越来越简单和省时。
这篇文章总结了可能节省你大量时间的十个visual studio的调试技巧和方法。
1 悬停鼠标查看表达式值
调试是很有挑战性的。比如在函数内逐步运行可以看出哪里出错,查看堆栈信息可以知道函数被谁调用等等。。。
但是无论哪种情况下,查看表达式和局部变量的值都是很麻烦的(把表达式和局部变量放到watch窗口里)。
一种更简单的方法,把鼠标停在所需查看的数据上。如果是类或结构,那么点击展开可以很方便快速地查看其字段。
2 在运行过程中改变变量值
调试器不仅仅是分析程序崩溃和诡异行为的工具,还可以通过逐步调试检查数据和行为是否符合程序预期的方法解决许多bug。有时,你会想是否设置某些条件为真,程序就能正确运行了。其实你只要把鼠标移动到变量上,双击值,然后输入你需要的值。这样就不需要修改代码,重启程序了。
3 设置下一个运行位置
一个典型的调试案例是我们经常会用逐步调试的方法去分析为什么函数出错了。这时你遇到这个函数调用其他函数返回错误,而这个错误不是你想要的,你该怎么办?重启调试器?这里有个更好的方法,直接把黄色的运行位置箭头拖到你想要的运行位置。其实就是跳过中间运行代码,直接到想要的位置。很简单吧。
4 编辑然后继续运行
在运行一个很复杂的程序和插件时,发现一个错误,但是不想浪费时间去重编译重启动程序。
很简单,只要在这个位置修改这个bug,然后继续调试。Visual studio会修改这个程序,使得你可以继续调试而不需要重启程序。
值得注意的是“编辑然后继续运行”这个功能有几个限制。一,它不能在64位代码上使用。如果想使用这个功能,到项目设置里的编译选项,选择”x86”作为目标平台。不要担心,这目标平台在reslease配置是和”debug是分离的,也就是说依然是”Any CPU”的设置。二,“编辑然后继续运行”这个功能仅适用于一个函数内部改变。如果你想要改变这个函数的声明或者增加新的方法,你只能选择重启程序,或者不做任何改变继续。如果修改的方法中包含lambda表达式,则意味着修改了编译器自动生成的委托类型,这样会导致编译器停止运行。
5 一个方便的查看窗口
大部分现代的调试器都有查看窗口。但是,visual studio的查看窗口使用特别简单,你能很方便的增加和删除变量。只要在窗口里点击空白行,输入表达式然后按enter键。或者点击表达式,按delete键删除不需要的表达式。
在调试窗口不仅仅可以查看普通的变量值,甚至可以输入$handles去追踪打开的句柄数量,$err去查看函数的错误代码(然后使用 Tools->Error 查看错误代码的描述)或者输入 @eax(在64位下是@rax )查看包含函数返回值的寄存器值。
6 注释反汇编
使用内部的反汇编功能使得优化局部代码更加简单。Visual studio可以在你的每一行代码下显示汇编指令,并且可以逐步调试汇编代码,也可以在任意位置设置断点。查看和修改汇编代码类似于c++。
7 堆栈信息的线程窗口
调试多线程代码是很痛苦的。或许也是有趣的。这取决于你的调试器。Visual studio 一个很赞的功能就是在线程窗口查看线程的堆栈信息。你能很方便的直接看到所有线程以及他们的堆栈信息。
8 条件断点
如果你想重现一个小概率事件,但是断点在大量不需要的条件下也会触发。你可以很简单的设置条件断点。在断点窗口设置该断点条件,Visual studio 会自动忽略不符合条件的断点。
9 内存窗口
一些bug是由错误的结构定义、缺少对齐属性等原因引起的。查看每行内存的内容很容易定位和解决这些bug. Visual studio 的内存窗口可以把数据翻译成8/16/32/64-bit数字或者浮点数。你可以在编辑窗口直接改变数值。
10 跳转到定义
如果你在解决别人写的代码一个bug,会遇到“这个类型是什么”“这个函数做什么的”之类的问题,你可以使用visual studio的跳转到定义的命令来查看类型或函数的定义。
11 命令窗口
这个小技巧是由chaau建议的,它能节省你大量的时间。Visual studio支持一个命令窗口,你可以通过菜单View->Other Windows->Command Window 打开。你可以在窗口里输入不同命令使调试自动化。比如,可以通过很简单的命令去的测试MFC的COleDateTime变量。
本文链接:http://www.cnblogs.com/oooweb/p/11-visual-studio-debugging-skills.html
from admin10000
新手必备!11个强大的 Visual Studio 调试技巧的更多相关文章
- 11个强大的Visual Studio调试小技巧
简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总 ...
- 11个强大的Visual Studio调试小技巧(转)
简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总 ...
- 11个强大的 Visual Studio 调试技能
简介 调试是软件开辟周期中很首要的一项目组.它具有挑衅性,同时也很让人困惑和懊恼.总的来说,对于稍大一点的法度,调试是不成避免的.比来几年,调试对象的成长让很多调试任务变的越来越简单和省时. 这篇文章 ...
- Visual Studio 调试技巧[Command Window & Immediate Window ](Tips)
Visual Studio 调试技巧[Command Window & Immediate Window ](Tips) 1. immediate window 定义的一些 alias (// ...
- Visual Studio 调试技巧 -- 为 Lambda 表达式设置中断
如果我说 .NET 世界上最厉害的开发平台(语言),资深的同仁肯定不会往下看了,因为这将是一个无休止的争论,到头来搞不好还是人身攻击.然而,如果我说 Visual Studio 是世界上最友好最强大的 ...
- BI之SSIS入门最新版Visual Studio调试技巧
简介 最近公司业务需要用到BI SSIS,SSIS是什么?"SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案( ...
- Visual Studio 调试技巧:10 篇热文汇总
本文精选了 DotNet 2017年11月份的10篇热门文章.其中有技术分享.技术资源. 注:以下文章,点击标题即可阅读 <Visual Studio的调试技巧 > 调试技巧是衡量程序员 ...
- Visual Studio 调试技巧之即时窗口的妙用
在 Visual Studio 中有一个窗口叫 Immediate 窗口,中文版本应该叫即时窗口.默认会在你启动调试时在 VS 编辑器中弹出来.你也可以通过 Debug | Windows | Imm ...
- Visual Studio 调试技巧
.net程序开发工具我都用vs(visual studio),开发过程中的跟踪调试最常用的就是断点跟踪调试了,但是现在才发现,用了这么多年vs断点跟踪调试是白用了啊.它居然还可以有这么多用法. 设置断 ...
随机推荐
- Matlab_GUI
1.GUI中控件的属性 BackgroundColor 控件的背景 FontSize 控件字体的大小
- 20155235 2016-2017-1 《Java程序设计》第3周学习总结
20155235 2016-2017-1 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 类与对象 定义类 使用标准类 对象指定与相等性 基本类型打包器 打包基本类 ...
- 20155332 2016-2017-2《Java程序设计》课程总结
20155332 2016-2017-2<Java程序设计>课程总结 1.每周作业链接汇总 2.博客之最 3.实验链接汇总 博客链接汇总 预备作业1:那些年陪伴我的老师+我期待的师生关系 ...
- thinkphp查询:
$Role=D('role'); //查询数据表 $role_data = $Role->order('role_id')->group('role_name')->select() ...
- 【LG5020】[NOIP2018]货币系统
[LG5020][NOIP2018]货币系统 题面 洛谷 题解 考场上第一眼还不会233 可以发现只要可以被其他的货币通过一些奇奇怪怪的方式表示出来的货币就\(ban\)掉即可 就是个完全背包 我是统 ...
- 1018: [SHOI2008]堵塞的交通traffic
1018: [SHOI2008]堵塞的交通traffic 链接 分析: 用线段树维护区间的四个端点的联通情况,然后查询的时候,把所有覆盖到的区间合并起来即可. 六种情况左上到右上(左边到右边的情况)… ...
- 【转】CentOS下MySQL忘记root密码解决方法
原文转自:http://www.cnblogs.com/sbaicl/articles/3132010.html 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在 ...
- Android开发笔记——视频录制播放常见问题
本文分享自己在视频录制播放过程中遇到的一些问题,主要包括: 视频录制流程 视频预览及SurfaceHolder 视频清晰度及文件大小 视频文件旋转 一.视频录制流程 以微信为例,其录制触发为按下(住) ...
- C++自学第二课:对象和类的概念
既然是C++,比C语言多了最重要的概念:面向对象. 面向对象?对象是什么?Girlfriend? 我天天面向她也没学会C++. 我觉得对象就是有统一特征的一类编程目标. 打个比方说墙上有个开关,我一按 ...
- git clone、git pull和git fetch的用法及区别
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流.Git 常用命令速查表 最近在一个学习小组里学习AI的课程,我们所有的学习资料和homework都放在gitlab上.今天一个小队友从gitlab ...