如何在VC6进行C语言调试.doc_第1页
如何在VC6进行C语言调试.doc_第2页
如何在VC6进行C语言调试.doc_第3页
如何在VC6进行C语言调试.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2010-09-02 20:15【文章标题】: VC6.0中调试C语言程序简析【文章作者】: evilkis-VC6.0中调试C语言程序方法简析1.调试工具简介:VC6.0中有两个应用比较频繁的调试工具:(1)Memory窗口:其作用即查看相应地址中存放的内容,如图1最左边一列为地址 右边四列的内容为内存中的内容,以16进制表示,最后一列为内存内容 的文本显示。(2)Watch窗口:其作用是监控表达式在程序运行过程中值的变化;其中要监控的表达式是我们自己输入的,如图:要查看那个变量的值的变化就在Name那一列输入变量的名字即可。2.实战应用有人说软件开发的能力一看设计能力,二看调试水平,可见调试能力对我们写程序的人来说是一项必须要掌握的技能,调试程序不仅仅可以帮助我们找出程序中的错误还能帮助我们更好的理解相关的C语言内部的东西,那我们现在就来简单的实战一下吧,首先简单说一下调试常用的几个调试快捷键当我们进入调试状态时在VC菜单栏中会出现一个Debug工具栏:其最常用的几个快捷键如下(1) (Step Over)F10:单步执行,遇到函数调用时,执行完函数调用返回到下一条语句。(2) (Step Into)F11:单步执行,遇到函数调用时进入到函数中执行(即进入到函数的实现代码中执行)如何进入调试状态:进入调试状态有很多方法简单说两种:(1)在程序中下个断点,然后按F5(2)直接按F101.调试第一个程序hello world!,按F10进入调试状态:一直按F10执行到size_t i=strlen(a);这句在右侧watch窗口Name下输入&a,然后拖到Memory窗口,或者直接在Memory窗口输入&a;如上图 可知字符数组的首地址为0012ff74,共有12个元素,a0在内存中为68(注意这里是16进制表示的)转换为10进制为104,相应的ascii码为h,以此类,此外我们会发现a11在内存中为00,其ascii码为空字符即0,所以此时我们应该能理解字符串在字符数组中是以0结尾的吧!2.看一下数组名与数组首地址的关系还是上面的程序 我们在Watch窗口Name列中输入a和&a,和&a0如图:通过这个可知a= =&a= =&a0也就是数组名就是数组的首地址,他是一个地址常量即指针常量指向hello world这个字符串,所谓指针常量即指针的值不能改变,但可以改变它所指向的内容,而常量指针是指 指针的值可以改变但不能改变它所指向的内容。3.看一下多字节数据在内存中的存储方式:程序如下:按F10进入调试状态,单步执行到 i=10这一行,如图可知所有未初始化的int型变量都在内存中为CCCCCCCC,在执行一步,可以看到地址0012ff7c处的值为0A000000,因为int型数据在内存中占4个字节,可以用sizeof这个操作符算一下,内存中的数据是以16进制数字表示的所以一个字节要存放两位16进制数,显然0A000000和十进制数10不匹配,这就到了我们了解多字节数据在内存中的存储方式了:下面摘自加密与解密第三版第一章的内容多字节数据的在内存中的存放实际与CPU有关,常见的Intel系列的芯片使用的编码方式属于Little-Endian类(这也是我们大多数使用的电脑的cpu类型),另外的是某些RISC架构的CPU,如IBM的Power-PC等属于Bid-Endian类:Little-Endian:低位字节存入地地址,高位字节存入高地址,反序排列如将12345678h写入以100h开始的内存中结果为 -|-|-|-|-|- 100h|78h | 56h|34h|12h| -|-|-|-|-|- -地址变高8个2进制位是1个字节 4个2进制位表示一个16进制数字所以78h要占一个字节看到这里我们因该知道在我们大部分机器里面的数据存贮应该是逆序吧,所以上图中的值应该是0000000A,转换成10进制正好是10。看到这里我们感觉到调试的重要性了吧呵呵4.调试一下数组越界的程序,众所周知C语言是不检查数组越界的,所以我们在编写程序的时候应当小心,尽量把数组的长度定义成符号常量。下面的程序改自科锐back老师来测试大家C语言功底的第二道题目:原题目在/showthread.php?t=51839程序如下:此程序在Debug模式下运行是个死循环,原因就是数组越界按F10我们调试一下,单步执行到for循环,然后在Watch窗口输入a,和&i,来查看数组的首地址和变量i的地址如图:可知数组a的首地址为0x0012ff68,而i的地址为0x0012ff7c,通过计算可知,在a4后的长度为4字节的内存区域里存放的就是i的值了,单步执行for循环执行5次,我们会发现数组越界地址0x0012ff7c被置为0,如图:即i=0;故而又满足循环条件,所以又会循环,也即此程序会无限循环如下图:好了就

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论