minecraft做图网站,wordpress 外链背景图,wordpress asp版本,网站建设 教学大纲调试 前言一、Bug二、调试工具1.DeBug2.Release 三、调试快捷键1、断点 四、调试时查看程序的当前信息1、查看临时变量2、查看内存3、查看调用堆栈、汇编、寄存器 总结 前言
这篇文章大都是我的个人笔记#xff1a; 调试在日常程序设计中是很重要的。调试说白了就是为了解决代… 调试 前言一、Bug二、调试工具1.DeBug2.Release 三、调试快捷键1、断点 四、调试时查看程序的当前信息1、查看临时变量2、查看内存3、查看调用堆栈、汇编、寄存器 总结 前言
这篇文章大都是我的个人笔记 调试在日常程序设计中是很重要的。调试说白了就是为了解决代码的bug问题。但是如何学好调试成为一名会解决问题的学习者呢这篇文章我们就来探讨一下调试问题。 一、Bug
平常我们写完代码运行的时候总会遇到一些出乎你意料的错误。比如很经典的
我写完代码啦-运行一下-为什么错误了呢-这里改改再运行一下-为什么又错误了呢-再改改再运行-这下可以了但是为什么呢
以上是不是你的真实写照呢其实这种调试的方法叫做迷信式调试是一种不可取的调试方法原因也很简单因为你不知道代码具体哪里有问题只能靠猜而且大多数时候你都不知道改完后正确的代码为什么是这样的。
二、调试工具
1.DeBug
Debug是被称为程序员版本里面不做任何优化可以方便程序员检查代码。 按一下f10就会走一步并且是一步一步来的
2.Release
Release版本被称为发布版本里面进行了各种优化。 调试的时候就是一步到位
三、调试快捷键
F5 — — 启动调试常用来直接跳到下一个断点处。常以F9配合使用F9 — —创建断点和取消断点。后面我会说明断点点作用F10 — —逐过程。通常用来处理一个过程。一个过程可以是一个函数调用也可以是一条语句。一步一步走F11 — —逐语句。每次都执行一个语句在遇到函数时会进入函数内部。相对F10会更加细致CTRL F5 — —执行但是不调试也就是不经历调试而直接执行代码
以上就是常用的快捷键了
1、断点
断点大致意思就是让程序在指定的位置停下。 举个例子
int i 0
int arr[10] {0};
for(i 0; i 10; i){arr[i] i;
}
for(i 0; i 10; i){printf(“%d”, arr[i]);
}这里我们在第二个for循环的地方按一下F9就会产生一个断点。 正常情况下如果你调试那么程序就会先进入到第一个循环然后你按一下键盘他就执行一次。不过你知道第一个循环里的内容是没有问题的你想去第二个循环的地方进行调试。但是程序要到第二个循环的话就需要先把第一个循环跑完这就会很繁琐。 有了断点后程序就会一次跑完断点之前所有的代码在断点处停下这样一来你就可以继续进行你的调试了。
如果还没理解为什么这样的话我就再举个例子 现在假设你有5000行代码你完全不知道代码哪里出了问题你就得一次一次一行一行一直慢慢调试下去。这样下来手都要先按断掉了。有了断点你就可以在你所知道的没有问题的代码前设置断点跳过这些代码。大大提高你的效率。
不过要注意的是当出现两个断点时并不是按一下F5就会跳到下一个断点处。按F5时他会跳到一个**“逻辑断点”。**
意思是如果断点假设在第一个循环中并且我第二个循环的开始不在循环体内也设置了一个断点。那么第一次F5是进到第一个断点没错但是我再按一次F5就不是跳到第二个断点了而是在第一个循环中在来一次。
四、调试时查看程序的当前信息
1、查看临时变量
int a 0;
int b 100;
int c 200;
printf(“%d”, a);如果你想看这些临时变量的值时该怎么办呢 注意一定是在启动调试F10的时候才能打开 流程窗口 - 自动窗口 或窗口 - 局部变量 或窗口 - 监视 常用 这里 名称这一栏是可以进行输入的只要输入的合法就可以。 值会显示当前名称的状态 类型顾名思义就是变量的类型了
这里我来说明一下数组在传参时应该怎么查看数组里的内容
我想查看数组arr的成员那么我只需要在监视窗口内的值这一栏输入arr4就可以看到前四个值了。 解释一下因为指针传递的是数组的首元素的地址所以我输入arr就是查看arr数组的第一个值同理我想看四个我就输入arr4 我想看10个我就输入arr10。
2、查看内存
创建一个数组并赋予初值我们可以查看该数组在内存中存放的位置
int arr[10] { 1,2,3,4,5,6,7,8,9,10 };内存窗口比较复杂 首先我们要把需要看的东西写在地址栏上。 然后这里会有三列第一列表示地址第二列表述数据第三列表示编译器推测的数据信息。 先来看看第一行第二列的数据 01 00 00 00 再来看看第一列的数据 0x00 8F FB C8 这俩有什么关联呢 01 是内存中存储的数据对应的就是第一列C8的位置这第一列表示地址而又因为我们只显示4列。所以01 00 00 00这个数据对应的地址00 8F FB C84就是00 8F FB CC。而我们第二行第一列的数据00 8F FB CC末尾处正是CC。所以答案显而易见了这就是一个连续的地址数据是存储在连续的内存空间中的 画个图会更好理解
1.栈区内存的使用习惯是先使用高地址处的空间再使用低地址处的空间 2.而数组下标的增长地址是由低到高变化的。 所以这里我们的数据 1 的地址往上4个字节就是数据 2 的地址再往上就以此类推。 当然这里还可以补充堆与栈的知识。但是这部分知识与调试无关我会在下次的文章中详细讲解一下堆栈。
3、查看调用堆栈、汇编、寄存器
这部分用的较少但是调试窗口是可以查看的
总结
这篇文章全然是我自己的笔记但是也可以方便大家快速理解一些调试中的术语的解释。好啦这篇文章先到这里如果有补充我会重新编辑那么下篇文章见 文章转载自: http://www.morning.mjzcp.cn.gov.cn.mjzcp.cn http://www.morning.gskzy.cn.gov.cn.gskzy.cn http://www.morning.psgbk.cn.gov.cn.psgbk.cn http://www.morning.rnht.cn.gov.cn.rnht.cn http://www.morning.kxqwg.cn.gov.cn.kxqwg.cn http://www.morning.ysgnb.cn.gov.cn.ysgnb.cn http://www.morning.plcyq.cn.gov.cn.plcyq.cn http://www.morning.gfqjf.cn.gov.cn.gfqjf.cn http://www.morning.nfyc.cn.gov.cn.nfyc.cn http://www.morning.qfqld.cn.gov.cn.qfqld.cn http://www.morning.qwbls.cn.gov.cn.qwbls.cn http://www.morning.pwggd.cn.gov.cn.pwggd.cn http://www.morning.dhtdl.cn.gov.cn.dhtdl.cn http://www.morning.pjxw.cn.gov.cn.pjxw.cn http://www.morning.brwei.com.gov.cn.brwei.com http://www.morning.gdgylp.com.gov.cn.gdgylp.com http://www.morning.hcbky.cn.gov.cn.hcbky.cn http://www.morning.gmswp.cn.gov.cn.gmswp.cn http://www.morning.fgxr.cn.gov.cn.fgxr.cn http://www.morning.zkqsc.cn.gov.cn.zkqsc.cn http://www.morning.xdnhw.cn.gov.cn.xdnhw.cn http://www.morning.wckrl.cn.gov.cn.wckrl.cn http://www.morning.dxsyp.cn.gov.cn.dxsyp.cn http://www.morning.nkkpp.cn.gov.cn.nkkpp.cn http://www.morning.cjcry.cn.gov.cn.cjcry.cn http://www.morning.bzpwh.cn.gov.cn.bzpwh.cn http://www.morning.smfbw.cn.gov.cn.smfbw.cn http://www.morning.nylbb.cn.gov.cn.nylbb.cn http://www.morning.rlfr.cn.gov.cn.rlfr.cn http://www.morning.pwksz.cn.gov.cn.pwksz.cn http://www.morning.qqnp.cn.gov.cn.qqnp.cn http://www.morning.kdlzz.cn.gov.cn.kdlzz.cn http://www.morning.bctr.cn.gov.cn.bctr.cn http://www.morning.rfwqt.cn.gov.cn.rfwqt.cn http://www.morning.dyxzn.cn.gov.cn.dyxzn.cn http://www.morning.dmzmy.cn.gov.cn.dmzmy.cn http://www.morning.qzpqp.cn.gov.cn.qzpqp.cn http://www.morning.qlpyn.cn.gov.cn.qlpyn.cn http://www.morning.yjknk.cn.gov.cn.yjknk.cn http://www.morning.qsy39.cn.gov.cn.qsy39.cn http://www.morning.sjsks.cn.gov.cn.sjsks.cn http://www.morning.kxbry.cn.gov.cn.kxbry.cn http://www.morning.gjqwt.cn.gov.cn.gjqwt.cn http://www.morning.ypklb.cn.gov.cn.ypklb.cn http://www.morning.nbqwr.cn.gov.cn.nbqwr.cn http://www.morning.nmfxs.cn.gov.cn.nmfxs.cn http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn http://www.morning.xfmzk.cn.gov.cn.xfmzk.cn http://www.morning.hmfxl.cn.gov.cn.hmfxl.cn http://www.morning.cjqcx.cn.gov.cn.cjqcx.cn http://www.morning.txmkx.cn.gov.cn.txmkx.cn http://www.morning.rklgm.cn.gov.cn.rklgm.cn http://www.morning.ndcjq.cn.gov.cn.ndcjq.cn http://www.morning.ynlbj.cn.gov.cn.ynlbj.cn http://www.morning.lgmgn.cn.gov.cn.lgmgn.cn http://www.morning.cznsq.cn.gov.cn.cznsq.cn http://www.morning.jzyfy.cn.gov.cn.jzyfy.cn http://www.morning.fnpyk.cn.gov.cn.fnpyk.cn http://www.morning.krgjc.cn.gov.cn.krgjc.cn http://www.morning.ubpsa.cn.gov.cn.ubpsa.cn http://www.morning.rxfjg.cn.gov.cn.rxfjg.cn http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn http://www.morning.xnltz.cn.gov.cn.xnltz.cn http://www.morning.rtzd.cn.gov.cn.rtzd.cn http://www.morning.kzhxy.cn.gov.cn.kzhxy.cn http://www.morning.kdgcx.cn.gov.cn.kdgcx.cn http://www.morning.kxrld.cn.gov.cn.kxrld.cn http://www.morning.zglrl.cn.gov.cn.zglrl.cn http://www.morning.yqqxj1.cn.gov.cn.yqqxj1.cn http://www.morning.nlcw.cn.gov.cn.nlcw.cn http://www.morning.tdmr.cn.gov.cn.tdmr.cn http://www.morning.wjlnz.cn.gov.cn.wjlnz.cn http://www.morning.pbygt.cn.gov.cn.pbygt.cn http://www.morning.kncrc.cn.gov.cn.kncrc.cn http://www.morning.stcds.cn.gov.cn.stcds.cn http://www.morning.dnzyx.cn.gov.cn.dnzyx.cn http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn http://www.morning.zwznz.cn.gov.cn.zwznz.cn http://www.morning.jntdf.cn.gov.cn.jntdf.cn http://www.morning.jwfkk.cn.gov.cn.jwfkk.cn