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. Hive集成HBase实践

    #step1: create hive table 't_test' hive -e "create table test.t_user(id int,name string,age int ...

  2. Python魔法方法之属性访问 ( __getattr__, __getattribute__, __setattr__, __delattr__ )

    通常情况下,我们在访问类或者实例对象的时候,会牵扯到一些属性访问的魔法方法,主要包括: ① __getattr__(self, name): 访问不存在的属性时调用 ② __getattribute_ ...

  3. 打造自己的LinQProvider(四)

    打造自己的LinqProvider *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  4. Java学习--javabean

  5. 由表生成代码:mybatis-generator入门

    application.properties ## mapper xml 文件地址 mybatis.mapper-locations=classpath*:mapper/*Mapper.xml ##数 ...

  6. SpringBoot 入门(一)

    1. 什么是SpringBoot? SpringBoot是一个快速开发框架,能够帮我们快速整合第三方框架(Maven依赖关系##Maven继承),完全采用注解化,简化XML配置,内置嵌入Http服务器 ...

  7. Windows下Sqlplus中显示乱码

    set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 如果想显示英文 Set nls_lang=american_america.zhs16gbk 注意,前提是 ...

  8. 理解CSS3 transform中的Matrix(矩阵)——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2427 一.哥,我被你 ...

  9. PHP报错Deprecated: Function ereg_replace() is deprecated in

    可能用了PHP5.3乃至更高的PHP版本,目前DEDE中有很多地方的正则函数都用的ereg_replace,而这个函数现在在PHP5.3中已经被废止了. 解决办法: 如果一定要用php5.3,请修改p ...

  10. Ubuntu14.04安装Torch7笔记

    Ubuntu14.04安装Torch7笔记 利用快捷键Ctrl+Alt+T打开Ubuntu终端 第一步: 获取安装LuauJIT(C语言编写的Lua的解释器)和Torch所必需的依赖包. 代码如下: ...