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的粗略使用(求大神们补充、指教,小渣马上改)的更多相关文章

  1. 刚开始学HTML自己做的,求大神些多多指教。

    !DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> ...

  2. 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  3. [LeetCode]LRU Cache有个问题,求大神解答【已解决】

    题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...

  4. 刚下了VS2010不会用,求大神指点迷津

    刚下了VS2010不会用,求大神指点迷津 [菌菌][C语言MOOC]第七周计算分数精确值(10分) thinkphp3.1Calltoamemberfunctionget()onnull java提示 ...

  5. python 抓取搜狗微信出现的问题,求大神解决

    爬取到的data不是想要获取文章页面的源码,而是跳转到验证码的页面的源码.我网上查了一下是由于访问过于频繁导致的,我也加了time.sleep和改了请求头但还是显示不了,求大神支招,除了识别验证码的方 ...

  6. 真想用c#开发个 wp五笔输入法。。。奈何网上资料太少,源码都是c++写的。求大神指点!!!

    真想用c#开发个 wp五笔输入法...奈何网上资料太少,源码都是c++写的.求大神指点!!!!

  7. c# winfrom 页面的enter变为tab 功能使用 在特定的按钮里面如何继续当enter使用求大神帮忙解答一下 !!急

    enter 当tab  键用 已经实现  :例如按回车的时候切换一直走 ,走到一个按钮如何让回车键在这个按钮的时候还是执行enter按钮的功能而不是tab   求大神解答一下, 目前页面tab功能改为 ...

  8. iis频繁奔溃,求大神帮忙分析dump

    直接上图了 上图三个错误最近频繁出现,出现一次iis就奔溃一次,抓取的dump分析后如下: Couldn't resolve error at 'ls' :> !analyze -v ***** ...

  9. 读FCL源码系列之List<T>---让你知其所以然---内含疑问求大神指点

    序言 在.NET开发中,List<T>是我们经常用到的类型.前段时间看到其他部门小伙伴讨论“两个List(10W个元素)集合求并集,list1.Where(p=>list2.Cont ...

随机推荐

  1. asp.net web api 跨域,带cookie

    官网上有一个介绍 http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api 但是只支 ...

  2. VB/C#获取资源Rources

    VB.Net: My.Resources.ResourceManager.GetObject("data") C# Properties.Resources.文件名

  3. 19、网络编程 (Socket套接字编程)

    网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用层.传输层.网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解. 链路层:链路层是用于定义物理传输通道,通常是对某些 ...

  4. SpringMVC的controller层接收来自jsp页面通过<a href="/user/userUpdateInfo/>的中文乱码问题

    这种情况是,jsp页面的中文正常显示,数据的中文也是正常显示,但是在Controller层接收到的中文是乱码,如下图所示: 解决方法:在Controller层对前台传递的中文乱码进行处理,将它转换成u ...

  5. proto3 笔记1

    定义 Message 类型, 例子如下: syntax = "proto3"; message SearchRequest { string query = 1; int32 pa ...

  6. JXU1NDRBJXU0RTJBJXU1MjJCJXU1NDI3

    U2FsdGVkX19f62S3+iSZxxJBADqNOfYV6/XumpnG7VwzMlQz7T7SaFsjyQx9d4PWAYQwtmgr4T9wDGKnKJCrR0veUEul6Uj4mEkN ...

  7. 代码实现自定义TableView

    实现效果(通过代码的方式实现TableCell 的创建) 实现过程: 实现过程两个部分 1 数据源的准备 本例子采用NSDictionary +NSArray 为数据源 (接口部分) (数据初始化部分 ...

  8. UOJ#410. 【IOI2018】会议

    传送门 首先可以设 \(f[l][r]\) 表示 \([l,r]\) 的答案 设 \(x\) 为区间 \([l,r]\) 的最大值的位置,那么 \(f[l][r] = min(f[l][x-1]+h[ ...

  9. loj#2542. 「PKUWC2018」随机游走(MinMax容斥 期望dp)

    题意 题目链接 Sol 考虑直接对询问的集合做MinMax容斥 设\(f[i][sta]\)表示从\(i\)到集合\(sta\)中任意一点的最小期望步数 按照树上高斯消元的套路,我们可以把转移写成\( ...

  10. 阿里云服务器linux主机如何添加swap分区

    为什么要添加Swap分区?swap分区,即交换区,作用为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作 ...