windows下VS开发必须掌握的几种调试技术

代码调试是非常重要的,有时候开发的时间并不长,但是大部分时间都消耗在了调试代码上, 而且我们查找bug的时候,不懂得调试根本就是不可能的任务。下面介绍几种最基本的调试方法,虽然基本,但是绝对可以涵盖绝大部分的开发情况。再往高级的话,那可能就是windebug这样专业的调试工具了。当然,写这篇文章的原因,是我在之前查找这方面资料的时候,很多人的文章都是copy,而且方法都是打断点,这对工作中的开发简直就是废话。还有一种就是windebug。如果能介绍些实用的也就罢了。大篇幅的介绍windebug里面的命令,也没有什么实战的项目,没有真正有用的东西,所以,我把自己目前掌握的一点“公开的秘密”写出来,希望帮到大家。互联网的精神,就是共享啊!

**************************************************************************************

1>不用说,最常用的方法就是打断点,然后单步调试检查一下你的值是否正常,值正常说明前面运行是没有问题的,那就继续往下走,这样你的范围越来越小,能够精确定位事故处。打断点很方便,在代码的最前面点一下就有一个,再一下就消失了。下面是一些快捷命令,前三个是我常用的,后面的目前都没用过。

F5:调试状态运行程序,程序执行到有断点的地方会停下来

F10:单步执行程序

F11和F10:的区别是,如果当前执行语句是函数调用,则会进入函数里面

F9:在当前光标所在的行下断点,如果当前行已经有断点,则取消断点

Ctrl+Shift+F9:取消所有断点

CTRL+F10:运行到光标所在行

SHIFT+F11:跳出当前所在函数

到这里可能很多人就奇怪了,将这个似乎没啥用啊?这里我想说的是一个小技巧。就是VS编译器会对我们的代码进行优化,当你写好代码后编译后,调试的时候有时候会发现有些值不正常(理论上肯定是正常的),或者明明是走到这里,结果断点跑到了别的地方。这种情况是因为VS对代码进行了优化,比如你int a = 1;但是之后a这个值可能之后都没有使用,那么你调试的时候可能就走不到这个地方或者a的值显示异常。这对我们调试代码很不方便。所以,我们用断点调试的时候,如果发现不准确,就先关闭掉VS优化,等调试结束后,再恢复即可。关闭优化的地方在。右键工程属性->C/C++->Optimization,这里有两处,一处是Optimization选择Disabled,还有就是Favor
Size Or Speed选择Neither。这样再去调试代码就方便多了。

*********************************************************************************

2>考虑这样一种情况。你打包好一个程序给测试,然后出问题了。这时候你也不清楚问题出在哪里?如果让你在编译器里调试源代码,根本没有思路,这时候最好的方式当然是调试打包好的程序啊。这个时候可以用VS的Attach
to Process附到这个进程上,这有个前提,就是这个exe必须是你现在的代码编译出来而且没有修改过的,这样才能Attach成功,否则是无法捕获到的,原因是pdb不同,这个自行查资料。这个例子可以举的不是很好,因为我们完全可以再编译器里调试,例子有点牵强。好,现在看这样一个例子。如果你的程序用到了很多dll(自己工程编译出来的dll),然后你某个dll有问题,你只需要修改了这个dll,修改好以后,你想看下修改的是否正确。但是需要重新将整个程序打包出来,这个过程耗时而且繁琐,如果修改不正确就得继续来过。那有没有办法利用现在的程序调试呢?答案是有的,你可以将这个修改好的dll替换之前打包好的程序里的dll,这样运行这个程序,然后在该dll代码里的相应地方打上断点,Attach就可以进行调试了。这样省时省力。这个技术的运行的关键是,调试的程序或者dll必须和你工程里的是一致的,如果你在编译后修改过源代码,那就无法attch成功了。

*****************************************************************************************

3>现在在考虑上面的一种变异情况。如果你的某些操作很快,也就是等你利用VS的Attach
to Process附到这个进程上时,也许你想调试的功能早就过去了,或者进程都已经结束了。那么能不能在程序一运行的时候就能立刻Attach上去呢?其实方法还是很多的。对于VS的话,可以通过设置一个注册表键值,这个小技巧在《Windows核心编程》里就讲到过,在HKLM-software-microsoft-windows NT-currentversion-image file execution下新建一个项,项的名字就是你程序的名字,包含.exe,这个项里面新建一个REG_SZ类型,名字为debugger,键值是vsjitdebugger,也就是VS
just in time debugger的意思。这样,程序一运行的时候,就会弹出一个VS框提示你要附到哪个VS编译器上面。然后就可以愉快的调试代码了。刚才说有很多方式,当使用windebug调试的时候,也有类似的功能,原理都是差不多的。

*****************************************************************************************

4>当我们调试脚本的时候,似乎没什么方法去调试,只能通过脚本的信息输出来进行判断,其实方法还是有的。比如我们想调试脚本里调用某个dll的时候,我们必须要调用之前就Attach上去,不然就没办法调试了。怎么办呢?我们可以在脚本调用dll之前,写个弹出对话框的语句进去,这样执行到这里,程序就会停下来,这时候我们Attach上去,然后关闭掉对话框,就能愉快的调试代码了。

*****************************************************************************************

上面就是我目前掌握的一些调试技巧了,但是大部分代码通过这几步都是没问题的。如果你要调试的是一个没有源代码的程序,那就得用windebug这样强大的工具了,当然,我目前是不会的。以后有好的调试方式会继续放上来的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 20:30:50

windows下VS开发必须掌握的几种调试技术的相关文章

[0010] windows 下 eclipse 开发 hdfs程序样例 (二)

目的: 学习windows 开发hadoop程序的配置 相关: [0007] windows 下 eclipse 开发 hdfs程序样例 环境: 基于以下环境配置好后. [0008] Windows 7 下 hadoop 2.6.4 eclipse 本地开发调试配置 1. 新建HDFS下载文件类 在已有mapreduce项目中新建类添加如下代码,代码从[0007]中取出小修改 功能:从hdfs下载文件到windows本地 package hadoop.hdfs; import java.io.F

windows下spark开发环境配置

http://www.cnblogs.com/davidwang456/p/5032766.html windows下spark开发环境配置 --本篇随笔由同事葛同学提供. 特注:windows下开发spark不需要在本地安装hadoop,但是需要winutils.exe.hadoop.dll等文件,前提是你已经安装了eclipse.maven.jdk等软件 spark支持jdk版本建议是1.8及以上,如果开发spark建议将jdk编译版本设置为1.8 我选择的spark是spark-1.4.0

[傻瓜版] Redis在Windows下的开发环境配置步骤

redis默认运行在unix体系下,windows无法直接运行官方版.以下是几种解决方案, 一)Windows移植版.启动速度飞快,优先推荐使用. a) 2.6.12 是稳定版,我用来64位版做开发环境,数个月未发现重要问题.  下载地址: https://github.com/MSOpenTech/redis/tree/2.6/bin/release b) 2.8.4 是3月24发布的最新版,此版本运行时会临时占用内存大小的硬盘空间,下载地址: https://github.com/MSOpe

Windows下Android开发环境配置

最近在配置安卓. 还是拿舍友没带回家的手机.. 自己手机是WP.. 搞了半天搞好了. 叹了口气,要是有人这样教我就好了,少走好多弯路. 废话不说,步骤如下" 一.安装JDK 为啥要安装JDK就不说了吧?java写安卓.. 传送门: http://www.oracle.com/technetwork/java/javase/downloads/index.html 安装完后,配置环境变量: 右击 "我的电脑"->属性->高级->环境变量->系统变量-&g

windows下STM32开发环境的搭建

一.概述 1.说明 笔者已经写了一篇Linux下STM32开发环境的搭建 ,这两篇文章的最区别在于开发环境所处的系统平台不一样,而其实这个区别对于开发环境的搭建其实影响不大,制作局部上的操作上发生了改变.鉴于此,本文没有必要对windows下搭建STM32开发环境的详细过程进行阐述,读者可以结合Linux下STM32开发环境的搭建和本文进行windows下STM32开发环境的搭建. 2.开发环境描述 硬件开发板:野火STM32开发板 Cortex-M3型号:STM32F103VET6 下载器与调

【Objective-C】Windows下Objective-C开发环境配置

[Objective-C]Windows下Objective-C开发环境配置 ftp://ftpmain.gnustep.org/pub/gnustep/binaries/windows/ 最近打算针对iPhone.iPod touch和iPad开发一些应用,所以,需要开始学习Objective C(苹果推出的类似C语言的开发语言).由于苹果的自我封闭的产业链发展模式(从芯片.机器.开发语言.终端产品.服务)的限制,要想开发针对苹果 iPhone等产品的应用程序,就需要用Mac机器,在Xcode

[0011] windows 下 eclipse 开发 hdfs程序样例 (三)

目的: 学习windows 开发hadoop程序的配置. [0007] windows 下 eclipse 开发 hdfs程序样例 太麻烦 [0010] windows 下 eclipse 开发 hdfs程序样例 (二) 输出日志变化,而且配置似乎很麻烦. 环境: windows 7 64下 eclipse 说明: 该实践是在[0008] Windows 7 下 hadoop 2.6.4 eclipse 本地开发调试配置 中设置后进行的, 在这里面进行了一些环境变量设置.插件安装. 如果按照以下

使用Vagrant在Windows下部署开发环境

Vagrant介绍 Vagrant可以提供可配置.可再生.便携的工作环境,它主要是一个中间层技术,它的下层是VirtualBox,VMware等虚拟机软件,它的上层是配置管理系统工具,比如Shell Scripts,Chef,Puppet等可以自动化安装和配置软件的工具. 对你有什么用 对于开发人员来说,Vagrant可以帮你统一团队成员的开发环境.如果你或者你的伙伴创建了一个Vagrantfile,那么你只需要执行vagrant up就行了,所有的软件都会安装并且配置好.团队成员可以通过相同的

windows下arm开发环境的搭建

看到了一本arm嵌入式开发的入门的书,<一步步写嵌入式操作系统>,这个书是用windows下环境来学习的,对于我这种上班时候只能用windows的人是个大好事. 因此还特地买了一本纸质的书来看,只是在第一章的开发环境和第二章的最基本的helloworld都卡了很久,今天终于解决了,在此记录一下. 开发环境折腾很久的原因有2个方面: 1. 书里面说了,在www.leeos.com下面可以下载相关的软件,如cygwin,arm-elf-gcc,skyeye等工具.但是,这个网站已经停了... 后来