[原译]11个高效的VS调试技巧
介绍
调试是软件开发周期中的一个很重要的部分,有时很有挑战性,有时候则让程序员迷惑,有时候让程序员发疯,但是。可以肯定的是,对于任何不是太那个微不足道的程序来说,调试是不可避免的。近年来,调试工具的发展已经使得很多调试任务简单省时了。
本文总结了十个调试技巧,当你使用VS的时候可以节省你很多时间。
1.悬停鼠标查看表达式
调试有时候很有挑战性,当你步入一个函数想看看哪块出错的时候,查看调用栈来想想值是从哪来的。另一些情况下,则需要添加一些监视表达式,或者查看局部变量列表,这通常还是花费一些时间的,但是。如果你把你鼠标指向你感兴趣的一个变量。你会发现事情简单多了。而且,类和结构体可以通过单击展开。这样。你就可以方便快捷的找到你想查看的变量了。
2实时改变值
调试器不仅仅是一个分析程序崩溃或是异常结果的工具了,许多bug都可以通过步入新写的函数,检查函数是否如期望的那样运行来预防。有时候你可能会好奇“如果条件为真函数会正确运行吗”大多数情况下,根本不需要改变代码重启挑起,仅仅把鼠标悬停到一个变量上,双击值然后输入一个新值就可以了。。
3.设置下一条语句
一个典型的调试情况就是通过单步跟踪分析为什么一个函数调用失败了。当你发现一个函数调用的另一个函数返回错误的时候你会怎么做?重启调试?有更好的方法。拖动这个黄色的语句标识到你想下一步执行的语句前就可以了。比如你刚才失败的那块,然后步入。简单,不是吗?
4.编辑然后继续
调试一个复杂的程序,或是一个插件的时候,在一个被调用很多次的函数处发现一个错误。但是不想浪费时间停下来,重新编译然后重新调试。没问题,仅仅在该处改正代码然后继续单步就可以。VS会修正程序然后继续调试不需要重启
注意,编辑然后继续有大量的已知限制,首先,64位代码是不行的。如果他如果为你的C#程序工作。就去工程设置的生成选项,然后目标平台为x86.不要担心。发布版的目标平台和调试的时候是分开的。可以被设置为任何平台。。
第二.编辑然后继续改变在一个方法里应该是局部的。。如果你改变了方法签名,添加一些新方法或是类。你就不得不重启程序了。或者撤销改变来继续。改变方法也包含lambda表达式隐式修改的自动生成的代理类,因此也不能继续。
5.方便的监视窗口
大概现代的调试器都有一个监视窗口,无论如何。VS允许你简单的添加或移除变量。单击空行,输入你的表达式按下回车,或者是在不需要的表达式上按下Delete键就可以删除了。
而且。从监视窗口你不仅仅可以看到“正常”的变量。你可以输入$handles 来追踪你的程序打开了多少句柄(可以方便的修复内存泄漏),输入$err 可以看到上一个函数的错误码,然后使用工具-错误信息可以看到更详细的描述,或者输入@eax(64位是@rax)来查看包含函数返回值的寄存器。
6.带注释的反汇编
使用交互式的反汇编模式可以使得优化程序的关键部分变得很容易,VS给出对应你代码每一行的汇编指令,并且运行单步运行。同时,可以在任何位置设置断点。而且,表达式的查看和修改也像在C++代码里一样
7.带有栈的线程窗口
调试多线程的程序是痛苦的。。或者也可以是很有趣的。取决于你的调试器。VS2010真正优美的特性是线程窗口的栈视图,通过窗口的调用栈你可以方便的总览线程。
8.条件断点
如果你尝试通过断点再现一个罕见的事件,该情况引发了一些严重的错误。你可以添加条件断点。定义一个断点的条件,然后如果条件不成立,VS会忽略该断点
9.内存窗口
有些bug由不正确的结构体定义引起,忽略的对齐属性等等。查看内存中的内容可以定位然后修复bug。VS提供了一个放百年的内存窗口,可以把值以8/16/32/64位的形式展示。还有浮点值。也允许实时改变他们。就像在文本编辑器里一样。
10.转到定义
这个特性不是直接关于调试的,而是关于浏览大项目的。如果你尝试找到一些不是你自己写的代码中的错误,快速知道“这个类型是什么”或者“这个函数是干嘛的”,可以节省很多时间,VS通过一个转到定义命令方便了你。
11.命令窗口
第十一的技巧chaau已经建议过了。确实可以节省很多时间,VS支持命令窗口,可以通过,视图-其他窗口-命令窗口来启动。一旦激活,你可以输入不同的命令来自动化调试。举个例子。你可以通过如下命令 简单的模拟MFC COleDateTime 变量。
? dt.Format("%Y-%m-%d %H:%M:%S")
许可
本文包括源代码和文件在CPOL下授权。
原文地址:10plus-powerful-debugging-tricks-with-Visual-Studi
著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!
from: http://www.cnblogs.com/lazycoding/archive/2012/10/03/2710738.html
[原译]11个高效的VS调试技巧相关推荐
- 11个高效的VS调试技巧
介绍 调试是软件开发周期中的一个很重要的部分,有时很有挑战性,有时候则让程序员迷惑,有时候让程序员发疯,但是.可以肯定的是,对于任何不是太那个微不足道的程序来说,调试是不可避免的.近年来,调试工具的发 ...
- Visual Studio中11个强大的调试技巧和方法
调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总结了可 ...
- Flutter调试技巧总结——高效开发的秘密
刚开始学前端的时候看到大家都是用的console.log()作为调试的手段,也可以说,很多人只会用console.log().在学习Flutter开发app的时候,我就在思考,除了使用print()来 ...
- Android STB 高效调试技巧
文章目录 一.编译 1.1 版本全编 1.2 模块单编 1.3 芯片特有单编模块 1.3.1 Uboot 1.3.2 boot.img&dt.img 二.调试 2.1 文件替换 2.1.1 常 ...
- js_调试_01_14 个你可能不知道的 JavaScript 调试技巧
更快更高效地调试你的 JavaScript 了解你的工具在完成任务时有很重要的意义. 尽管 JavaScript 是出了名的难以调试,但是如果你掌握了一些小技巧,错误和 bug 解决起来就会快多了. ...
- Xcode的调试技巧
转自:http://www.cnblogs.com/daiweilai/p/4421340.html#biyouji 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Glob ...
- iOS调试技巧(转载)
IOS各种调试技巧豪华套餐(转载) 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoin ...
- iOS各种调试技巧豪华套餐
转载http://www.cnblogs.com/daiweilai/p/4421340.html#biyouji 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Globa ...
- IDEA断点调试技巧,多张动图包教包会。
文章目录 一. 怎么开启断点调试? 二. 调试界面咋那么多按钮? 1.返回断点位置 2.步过 3.步入 4,5.强制步入,步出 6.回退断点 7.断点跳到光标处 8.表达式计算 9.恢复程序 10.停 ...
最新文章
- 视频录制,压缩实现源码
- express 的 middleware 设计
- 打包静默安装参数(nsis,msi,InstallShield,InnoSetup)[转]
- Python学习笔记:常用内建模块2:collections
- php 留言板分页显示,php有分页的留言板,留言成功后怎么返回当前页?
- 【OpenCV】OpenCV函数精讲之 -- argc 和argv参数
- 用Flash和XML构建论坛实例(3)
- 移动互联网向2.0时代转变
- Oracle学习笔记之触发器
- <2021SC@SDUSC>开源游戏引擎Overload代码分析五:OvEditor——RawShaders.cpp
- 迅雷 11 11.1.3.1122 ,主界面蜕变为简洁清爽的风格
- Python正态性检验(最简单的方法)
- 【jQuery】jQuery本地时间与世界时间时差转换
- python3d动画控制_3D旋转玫瑰花:python-matplotlib实现
- 全面正面解读:nmn的副作用和危害怎么样?nmn副作用及应对方法?
- 有哪些实用的软件开发项目管理工具?
- 用函数画出可爱的卡通猫
- 2020.04.01 【ABAP随笔】- ABAP面试分享
- 一站式:虚拟机安装Linux系统(CentOS_7),多节点Linux环境打造,XShell的使用
- iOS开发之《英语词汇学习》
热门文章
- 数学建模学习笔记——灰色关联分析(评价类)
- Python基础知识(第十一天)
- 如何避免贫穷和忙碌,在2018年你需要这样提升自己 2018年01月07日 00:00:00 2099 热文导读 | 点击标题阅读 Java和Android架构2017年总结:文章精选 吊炸天!74
- 完全图解RNN、RNN变体、Seq2Seq、Attention机制
- 深度学习(主要是CNN)用于图片的分类和检测总结
- LINUX防火墙打开与关闭
- jvm性能调优 - 14JVM的老年代垃圾回收器CMS原理
- Redis-18Redis主从同步
- Oracle-多表连接的三种方式解读
- Imageloader3-单例模式