学会如何调试程序bug

前言:---------- >学会如何调试程序bug<----------
  • 1.在开发中如何调试程序 ------------------(请看==》步骤一 至步骤 五)
  • 2.使用过哪些调试工具 ---------------------腾讯的 bugly
  • 3.程序上线后,如何收集错误信息---------(请看==》步骤 六)
  • 4.bugly演示 --------------------------------- (请看==》步骤 六)
  • 5.NSLog进行调试 --------------------------请看小结后-NSLog调试
案例分析:

步骤 一

  1. 创建一个项目,叫 "调试-01-crash".
  2. 假如,我们在这个项目中写一段错误的代码。如下:

    错误代码示例

    步骤 二

    cmd + R,运行一下,会报下面这个错误,如下图所示: (插入一个空对象在1的索引位置)

    错误解析

    步骤 三

    这时我们就会想,我们在哪里犯了错误,在哪里插入了空对象,并有到处翻bug的冲动。但是我们这时设想我们会有上百个文件,我们怎么找呢?

    -------------采用调用堆栈的方法-------------

    先执行的在下面,后执行的在上面。

    调用堆栈

    调用堆栈的详解

    首先,要看一下,调用堆栈给我们带来了哪些信息,比如说上图所示,

    ① 程序启动的时候调用       -[UIWindow makeKeyAndVisible]
      ====>(在往上看)
    ② viewController调用     - [viewController viewDidLoad]
                            - [viewController demoCrash]
    
    ③ 然后看下面这个,在一个数组中试图插入一个对象
                            + [NSArray arrayWithObjects:count:]
    ④ 在看到这个              -[__NSPlaceholderarray initwithObjects:count:]
    ⑤ 在往上看就崩溃了
     这时,我们就知道了,在 #demoCrash# 方法中出现了上面所描述的错误。
    ⑥ 分析完毕

    步骤 四

    找到错误,定位方法如下图所示:

    找方法

    定位方法

    步骤 五

    如果该项目,在真机上运行时,会怎么样?

    ** 项目会提示错误信息,调用堆栈不会显示。**

    真机运行-显示结果

程序上线后,如何收集错误信息

步骤 六

这时,我们思考一个问题,任何一个程序员,在做项目的时候都有可能会出现错误,比如说程序在上架的时候很有可能,有些错误没有改掉,或者说在测试的时候没有发现,就重复上架了。这时候,当用户运行时,就会产生崩溃。

===》那我们,出现一个问题,程序上线后,我们该如何收集错误信息呢?

对与这个,我们会通常,用第三方框架,在这里我们就用,QQ的bugly进行演示。

bugly演示

步骤 七 我们用QQ扫一扫,登录一下。就会进入下面的界面。

按照下面进行操作如图所示:

注册完毕后,会让我们,下载SDK,查看产品信息。

如下所示:

下载SDK

点击后进入这个界面

看使用指南Pod集成

pod集成

pod集成完之后---> 初始化SDK

初始化SDK

然后,我们找到 APPid

1

2

3

appid 填写到工程中,如下:

代码示例

到这个时候,基本完成,我们运行一下程序。会看到下面这张图,里面什莫错误也没发现。刷新一下,也看不到崩溃日志。

原因:一般我们程序运行,发生崩溃,都会停留在下面这张图中所显示。它就是一个断点,断点停留在这里了,程序后面代码就不执行了,不执行的话,错误信息就提交不上去。

我们把程序安装到真机,运行一下,会出现闪退的现象。

在刷新一下,图上这个界面,会出现下面,找到日志,如下图:

点击错误日志后会出现如下图:

重点看这里:

通过上图我们会发现一个什莫细节呢?

我们导入了腾讯的第三方框架之后,即便我们的程序上架了,我们也可以知道这个应用程序会崩溃到哪里。

小结

1.写在第一句

细节

2.金玉良言

金玉良言

NSLog调试

步骤一

创建一个名为"NSLog"的项目工程,在创建一个PCH文件。如下图:

PCH创建

cmd + B 编译一下

假如,我们这个程序使用了两年了,我们一直用的NSLog进行的调试,突然一想,把NSLog替换掉。那我们就考虑用PCH.如下图:

1

2

3

4

5

main:我们要使NSLog打印的更漂亮可以对其进行如下图的设置:

建议

时间: 2024-08-28 20:51:16

学会如何调试程序bug的相关文章

谈谈如何调试程序BUG (vs2012 cocos2dx)

这几天被程序的一个BUG搞得简直疯狂,我来大致描述一下这个BUG: 自己的回合先把卡牌拖到中间位置:,然后结束回合 下一回合将卡牌拖到前一个位置:,然后结束回合,第一张卡牌竟然就消失了!!但是对面的卡牌依然能被攻击,这说明这张卡牌在数据上是存在的!!只是图片,还有它的攻击特效全都消失了!! 我当时考虑的是不是被其他东西覆盖了,但是设置了ZOrder依旧没有解决问题...然后发现能覆盖它的只有背景,就干脆把背景去掉,但是图片还是会消失... 问题是只有这样图片才会消失,其他拖动顺序都不会消失,我用

Python 的经典入门书籍

实python非常适合初学者入门,上手很容易.我就是完全通过网上资源学了python的.最大的是3点经验:1.找一本浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本.把里面的例程都手打一遍,搞懂为什么.2.去找一个实际项目练手.我当时是因为要做一个网站,不得已要学python.这种条件下的效果比你平时学一门新语言要好很多.所以最好是要有真实的项目做.可以找几个同学一起做个网站之类.3.最好能找到一个已经会python的人.问他一点学习规划的建议,然后在遇到卡壳的地方找他指点.

关于时间的利用

转载请注明出处,谢谢. 想要尽可能多的获得成长,就必须多花些功夫."功夫"需要时间来累积,但每个人在一个时间段内所拥有的时间是同样的,如何在这些相等的时间条件中累积更多的"功夫"在于对时间的利用. 如何提高对时间的利用?当我们把时间比作奔流到海不复回的河流时答案就很明显了--开源与提质 .开源即将更多的时间用于"功夫"的累积,提质则是提高单位时间内"功夫"累积的量.总的来说对于一个较为积极上进的人,再在这两个方面进行努力都是有

我对软件测试行业的个人理解 4

我觉得我上一篇写得太简略了,估计很多人看了觉得不过如此,我决定在这篇里深化一下. 本文中,我定义技术路线长度或技术基础的标准为:普通人完全掌握一种技术所需要的时间,我把他的单位名称定义为Y,M,D (年,月,日) 比如3Y表示某技术需要普通人花3年时间来掌握,1M表示某技术需要普通人花1个月时间掌握. 本文有以下前提条件,基于我的个人理解: 前提一 计算机专业应届生的技术路线基础理论上为4Y,因为大学要读4年 培训班毕业非计算机专业的学生,以培训一年为例,技术基础为1Y 黑盒手工测试的技术路线为

Java程序员应该知道的10个调试技巧

转自:http://www.csdn.net/article/2012-09-03/2809495-Java-Debugging-Tips-with-Eclipse 木有收藏按钮,就直接转过来了.仔细阅读,很有帮助哈…… 摘要:调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧,保证让你受益匪浅! [CSDN.NET 张红月/编译] 调试可以帮助识别

编程到工程的精髓

列子有云:“得其精而忘其粗,在其内而忘其外:见其所见,不见其所不见,视其所使,而遗其所不视.”从编程到工程,我们需要很大的转换.找准目标和方向,取其精华,在一起内在的精华,我们才会明白编程其实就是做工程的基础. 语言知只是工具.从大一到大二,C语言机面向对象程序设计是大一时候学的一门基础课程,此外正在学的java语言,还有.NET语言,都是计算机专业最基础的语言.每一门语言,都需要掌握它的 精髓,只有明白了语言的精髓——就是特点,我们就能很轻松的进行编程.因为每一段代码,你要先读懂.读通它的意思

自动化smoke测试

1.smoke测试及是称为冒烟测试,由于公司一直用的smartrobot这个工具,我们所做的一直是产品的适配 2.安卓手机做自动化确实有一定的缺陷,在测试中自动化不可能缺少,但是不可能代替手工 3.我们做的自动化测试都是基于UI的测试 ,可以想象而知UI界面变化之大这是手机自动化面临的一个大问题. 4.手机每天都会更新版本,UI肯定变化,这样不停的适配脚本,肯定不是正确的自动化的走向,所以在适配脚本的时候我们尽量做到向前向后兼容 5.这就要求写的代码的稳定性及其好,走安卓UI如果说仅仅跟着UI的

10个调试Java的技巧

调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧,保证让你受益匪浅! 在开始之前,推荐大家去看看Eclipse shortcuts这篇文章,它将会给你带来很多方便.在本文中使用的是Eclipse Juno版(Eclipse 4.2),在开始前给大家提3点建议: 不要使用System.out.println作为调试工具 把所有涉及到的组件日志级别激活

关于程序设计的学习

计算机是人类通用智力工具,计算机的一切功能都是人赋予的. 对“计算机语言与程序设计”教学模式的评鉴:过于注重语句.语法和一些细节,基本上是以高级语言自身的体系为脉络展开的,没有把逻辑与编程解题思路放在主体地位上:对如何分析问题和解决问题讲得不够,对学生编程的能力.上机解题的能力训练的不够. 这样学习的时候枯燥难学,学过之后,不能用来解决实际问题. 以强调动手实践上机编程为切入点:以任务驱动方式,通过实例讲授程序设计的基本概念和基本方法:重点放在思路上,在c\c++语言的环境下,针对问题进行分析,