debug的粗略使用(求大神们补充、指教,小渣马上改)
debug的使用
往往我们在写代码的时候会发现那种很隐秘的bug,一直找找不多,甚至开始怀疑人生。目光扫描和人脑编译又耗时又耗精力又很容易中途乱了脑子,一切得重新来,所以我写了一篇博客来模拟一下检查bug时debug的过程,讲述一下对debug的一点了解和大概用法,求观摩的大神们多多批评,多多指点。
ps: 大家用的编译器不一定相同,debug的思想都相同,只是具体操作有略微区别,这里用Xcode编译器为大家演示。
这里我们假设有一道题目为:
输入n,然后输入n个数,输出这n个数的平方和。
范例输入:4 3 2 5 7
范例输出:87
背景:
我们有一段错误的代码:

具体操作:
1、首先,在输入范例数据之前我们得在代码中加入断点。断点的意思大概就是程序运行到这一行暂停,等待你的手动步进才能读取这一行的代码,然后跳到下一行。一般我把断点加在输入语句的后方,这样可以直接直接输入数据,减少步进次数。
2、然后编译运行代码,并输入范例数据。然后开始漫长的步进之旅(step in)。在IDE的上找到步进键,然后往下一直步进,并时刻关注数据的变化,debug的关键就在于观察数据到变化是不是如你预期地进行,如果不是,从哪里开始偏离预期,哪里的代码就错了。
debug过程截图:


接下来步进到输入行,程序将停下来等待你的输入数据

输入循环完成后进入运算循环


num从a数组中取得第一个值3

我们本想让num进行平方计算,去发现值为6,而不是我们想要的9,说明现在绿色的这行代码有问题,仔细看看发现我把乘号输成了加号,于是我就发现了bug病修改它,然后重新运行

修改后重新来到这一步


这次num平方后的值对了

这里再演示一层循环





剩下的就省略掉了
完美!!最后输出答案

变量框中如果有数组,你可以展开看所有的数组元素值

实际大家遇到的bug一定比这道题难找得多,非常隐秘,用这个方法可以更高效更方便地找到bug,大家动手去试试,说不定可以为以后节省很多时间、精力。
还有就是在运行过程中手动输出一些变量,也可以很方便地观察整个代码的运行,有时候比debug好用,因为一直按步进键非常慢,如果循环是上千上万次的就GG了。这个方法在我写 calculator plus 的过程中起到了很大的作用,有兴趣的可以看下,我没删掉,而是注释掉了。(求大神们指点指点、分享更好的方法)
debug的粗略使用(求大神们补充、指教,小渣马上改)的更多相关文章
- 刚开始学HTML自己做的,求大神些多多指教。
!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> ...
- 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- [LeetCode]LRU Cache有个问题,求大神解答【已解决】
题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...
- 刚下了VS2010不会用,求大神指点迷津
刚下了VS2010不会用,求大神指点迷津 [菌菌][C语言MOOC]第七周计算分数精确值(10分) thinkphp3.1Calltoamemberfunctionget()onnull java提示 ...
- python 抓取搜狗微信出现的问题,求大神解决
爬取到的data不是想要获取文章页面的源码,而是跳转到验证码的页面的源码.我网上查了一下是由于访问过于频繁导致的,我也加了time.sleep和改了请求头但还是显示不了,求大神支招,除了识别验证码的方 ...
- 真想用c#开发个 wp五笔输入法。。。奈何网上资料太少,源码都是c++写的。求大神指点!!!
真想用c#开发个 wp五笔输入法...奈何网上资料太少,源码都是c++写的.求大神指点!!!!
- c# winfrom 页面的enter变为tab 功能使用 在特定的按钮里面如何继续当enter使用求大神帮忙解答一下 !!急
enter 当tab 键用 已经实现 :例如按回车的时候切换一直走 ,走到一个按钮如何让回车键在这个按钮的时候还是执行enter按钮的功能而不是tab 求大神解答一下, 目前页面tab功能改为 ...
- iis频繁奔溃,求大神帮忙分析dump
直接上图了 上图三个错误最近频繁出现,出现一次iis就奔溃一次,抓取的dump分析后如下: Couldn't resolve error at 'ls' :> !analyze -v ***** ...
- 读FCL源码系列之List<T>---让你知其所以然---内含疑问求大神指点
序言 在.NET开发中,List<T>是我们经常用到的类型.前段时间看到其他部门小伙伴讨论“两个List(10W个元素)集合求并集,list1.Where(p=>list2.Cont ...
随机推荐
- C++ STL使用说明
标准模板库(Standard Template Library,STL)是一系列通用化组件的集合,包括容器(container).算法(algorithm)和迭代器(iterator). 迭代器ite ...
- angularjs 依赖注入原理与实现
在用angular依赖注入时,感觉很好用,他的出现是 为了“削减计算机程序的耦合问题” ,我怀着敬畏与好奇的心情,轻轻的走进了angular源码,看看他到底是怎么实现的,我也想写个这么牛逼的功能.于是 ...
- 通向全栈之路——(4)nginx反向代理配置
1.安装nginx:sudo apt-get install nginx2.新建配置文件:cd /etc/nginx/conf.dsudo vi XXX-cn-8080.conf内容如下:upstre ...
- HDU4336 Card Collector(期望 状压 MinMax容斥)
题意 题目链接 \(N\)个物品,每次得到第\(i\)个物品的概率为\(p_i\),而且有可能什么也得不到,问期望多少次能收集到全部\(N\)个物品 Sol 最直观的做法是直接状压,设\(f[sta] ...
- AngularJS学习 之 安装
1. 安装好Node.js 2. 安装好Git 3. 安装好Yeoman 以管理员身份打开cmd 输入 npm install -g yo 回车即可开始安装Yeoman,具体的安装行为最好看官网的介绍 ...
- C#+SharpMap的相关代码
//放大的代码: private void MapZoomIn(NameValueCollection queryString) { SharpMap.Map map = Session[" ...
- Android横、竖屏幕动态切换(layout-land 和layout-port)
下面是一个例子程序: 1.首先通过以下语句设置Activity为无标题和全屏模式: // 设置为无标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); ...
- 如何使用 adb 命令实现自动化测试
如何使用 adb 命令实现自动化测试 一.前提: 1.打开手机调试模式,确保手机已正常连接电脑,可在电脑上通过adb devices命令查看,结果如下说明连接成功: List of devices a ...
- Ubunt 安装mysql
apt-get install mysql-client-core-5.6apt-get install mysql-client-5.6apt-get install mysql-server-5. ...
- web assembly是什么,能干什么
web assembly混合javascript和另外底层语言编译的模块,共同运行.将js的高级,易用及c/c++的高效底层优势结合起来. 最可能的用处是提供一种可行的方法将原来的c/c++应用por ...