如何有效的debug

本文旨在于总结和记录软件开发中有效的调试思路。

当测试人员向我报告一个严重的bug时,我应该如何去思考这个bug,如何有效的快速的精确的定位bug所处的代码位置,如何最优解的修正代码缺陷?

在运用经典的科学调试方法时,基本会经历如下步骤:

1. 通过可重复的试验收集数据(即复现bug,同时抓去log);

2. 根据相关数据的统计构造一个假说(即根据以往的经验来确定方向,定义问题的边界);

3. 设计一个实验来证明或者反证这个假说;

4. 实施实验以证明或者反证假说,不能只停留在假说;

5. 跟具需要重复以上步骤。

依据以上五个步骤提供一种有效的方法:
1. 将错误状态稳定下来;

2. 确定错误的来源--

  a) 收集产生bug的相关数据;

  b) 分析所收集的数据,并构造对bug的假设;

  c) 确定怎样去证实或证伪这个假设,可以对程序进行测试;

  d) 按照2 - c)确定的方法对假设做出最终结论

3. 修正bug;

4. 对所修补的地方进行测试;

5. 检测修正是否有引入新的问题。

那么针对Android rom开发,可以用以上的方式来debug,对其他类型的软件开发一样适用,所不同的是调试技巧和工具不同,但是归根结底都是以上步骤的衍生。

只要明确了以上的五个步骤,在工程实践中面对80%的问题都会知道如何下手,首先就是分析现象和log来对bug分类,分类可以缩小缺陷代码的范围,同时也确定了分析方向,比如分events_log,如果确认是anr问题,那么我就知道要去分析anr log,如此就可以确定是死锁问题还是主线程操作i/o等耗时动作等。如果判断方向是tombstone,那么就去分析tombstone log,同时也就需要学习tombstone log的分析方法。

介绍Android 开发的调用栈打印方法:

  1)Java 层:

    Thread.currentThread().dumpStack(); //方法一

    Log.d(TAG,new RuntimeException("----Exception----")); //方法二

    new RuntimeException("----Exception----").printStackTrace(); //方法三

  2)Native 层

    #include<utils/CallStack.h>

    android::CallStack stack(("----Native Exception----"));

  利用调用栈就可以对代码逻辑进行分析,辅助我们理解代码的用意。比如需要分析android 手机启动时 PMS如何扫描system分区,安装系统应用的流程,就可以结合打印调用栈的方式来印证自己对代码逻辑的理解。

结合这些平台和语言的调试工具和行之有效的具有指导性的调试思路就可以对大部分bug进行分析,而不会觉得老虎吃天不知如何下嘴。

原文地址:https://www.cnblogs.com/gufanyuan/p/9250698.html

时间: 2024-08-30 14:13:15

如何有效的debug的相关文章

如何有效地与开发人员一起工作(二)

现在什么问题变小了? 为什么我要这么麻烦呢?看起来我是想去巴结一些朋友.朋友是好的,但是公司不会为我的社交生活付钱.公司给我报酬是让我使用一部分权力来达到某些目的,一种减少问题的方法.什么问题? 一般而言,摩擦. 我遵照John Daly的原则,不断地问自己:“我做测试不是找bug是做什么?”摩擦会减缓进度.开发人员和测试人员的一些典型摩擦浪费的时间其实可以更好地用在找bug上. 我的这种方法还帮助解决其它的问题. 找Bug的成本高.找得太迟. 如果一个bug能尽早发现,总是会比等到开发人员已经

设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的1

最近突然萌发了研究JDK源码的想法,所以就想到了在自己常用的Eclipse上可以调试JDK源码. 整个设置过程也很简单: 首先你要安装好JDK(我的JDK安装路径根目录是D:\Java\jdk-8u92-windows-x64),JDK安装路径里有个"src.zip"就是JDK的源码文件压缩包: 设置好环境变量的JAVA_HOME变量和PATH变量(JAVA_HOME变量值也是D:\Java\jdk-8u92-windows-x64). 然后打开Eclipse设置可以Debug模式调试

debug with Linux slub allocator

http://thinkiii.blogspot.jp/2014/02/debug-with-slub-allocator.html The slub allocator in Linux has useful debug features. Such as poisoning, readzone checking, and allocate/free traces with timestamps. It's very useful during product developing stage

【Django】Django Debug Toolbar调试工具配置

正在发愁怎么调试Django,就遇到了Django Debug Toolbar这个利器. 先说遇到的问题: 网上也有教程,不过五花八门的,挨个尝试了一遍,也没有成功运行.最后终于找到问题所在: 从开发服务器日志可知:在请求页面时,debug_toolbar已经被加载.但是并没有在页面上显示出来: 从浏览器的开发者工具可以看出,jquery.min.js获取超时,没有被加载成功.这就是问题所在. 我们在settings.py中添加一行: 1 DEBUG_TOOLBAR_CONFIG = { 'JQ

&lt;compilation debug=&quot;true&quot; targetFramework=&quot;4.5&quot;&gt; 报错解决方案

在 VS2013 下开发的 MVC4 网站,基于 .net 4.5,服务器是一台 Windows 2008 R2,运行的时候就报错了 The 'targetFramework' attribute in the <compilation> element of the Web.config file is used only to target version 4.0 and later of the .NET Framework (for example, '<compilation 

cmake Debug模式和Release模式

在cmake中要编译debug模式的话,在CMakeLists.txt中添加如下两行 (不写就用默认的值) SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb ") SET(CMAKE_CXX_FLAGS_RELEASE "${ENV{CXXFLAGS} -O3 -Wall") 然后,在编译的时候,使用如下命令: cmake -DCMAKE_BUILD_TYPE=Debug/Release  pa

Qtcreator编写ros程序:无法启动进程&quot;catkin_make&quot; -DCMAKE_BUILD_TYPE=Debug

利用Qtcreator编写ROS程序,你必须先进行相应的配置:在启动qtcreator环境时先把ros环境添加进.(即~/.bashrc文件) 1 版本问题 QT4 与 QT5 sudo    gedit ~/.local/share/applications/DigiaQtOpenSource-qtcreator.desktop     (qt5       默认安装的路径下) 当打开文件是空时,关闭.按照路径打开文件 cd ~/.local/share/applications/ gedit

eclipse debug调试mapreduce程序

1.将mapred-site.xml文件拷贝一份到项目中 <configuration>     <property>         <name>mapreduce.framework.name</name>             <value>yarn</value>     </property>     <property>          <name>mapred.child.java

服务器程序DEBUG

服务器端设定 Tomcat 默认我们启动Tomcat是使用下边的命令 ./catalina.sh start 如果想DEBUG的话,只需要加一个参数打开JPDA(Java Platform Debugger Architecture)就可以了 ./catalina.sh jpda start 注:默认的监听端口是8000,如果想修改这个端口的话,可以修改环境变量JPDAADDRESS. 如果我们的服务器是通过daemon.sh启动的tomcat话,貌似没有找到默认打开JPDA的方法,我们可以环境