现在维护和定制Android的需求越来越多,做的人也越来越多,而Google直接Release出来的源码中又有很多Bug和不合理的地方,特别是原生的应用,如Mms,Browser, Email, Contacts等。定制或做Android解决方案第一步就是要修复原生的Bug以得到一个稳定的系统。

1. 仔细观察Bug的特性

了解Bug所涉及的流程和模块有哪些,以及是什么样的Bug,Exception?功能上的?还是UI/UE设计问题。针对不同的问题,可能要采取不同的手段,对于Exception就要先分析Log文件,以确定产生Exception的原因;对于功能上的问题,可能要先尝试复现; 对于UI/UE的问题可能有要先找UI设计师确认是否需要修改。

2. 找出决定因素,排除次要和无关因素

分析,推敲和尝试复现以排除次要的,无关的因素和操作步骤。如果跟某些特定的数据有关,就要把数据进行拆解,以把无影响的部分去掉,直到找到引起问题的特殊数据。

3. 对比

跟正常的流程进行对比,跟没有问题的版本进行对比,跟同一系列的产品进行对比,看有哪些异常和不一致的地方。

4. 单一变量原则

每次改动一个变化的东西,这样你才能清楚是因为什么产生了问题或是解决了问题。如果同时的改动有二个就很难分的清是哪一个产生了作用。

5. 分而治之

通过分治的方法逐步缩小范围,先在一个模块分析,确定有问题或没问题,然后再转到其模块,先在其中一个逻辑或文件中分析,然后再到其他的,以避免盲目的乱找。

6. 模拟场景

用特殊的数据,或者修改代码来模拟Bug发生时的场景。这对复现非必现Bug时特别有用,对线程问题也很有用。

7. 定位问题的方法:经验+Log+Debugging工具

经验是要靠积累才能得来的,通常情况下对代码和流程熟悉的人定位起来就快速的多; Log是指日志文件和打印这种简单粗暴的方式;调试工具是指像Eclipse和GDB等断点单步工具。通常用经验和Log来进行大范围的定位,当对流程有了一定的了解后,且已经定位到稍小的范围,如一个函数内或一个文件内时就可以用工具进行断点和单步调试以精确定位。当范围很大时,如用调试工具会很慢,很难找到有效的断点,单步的话又太烦琐,很容易让人混乱和丢失思路。

8. 逆向推理和洞察力

在调试解Bug过程中逆向推理力十分的重要,因为你得到的是一个结果(Bug),而要去找到它的原因,就需要推理和猜测问题可能是出在哪里。另外一个非常重要的能力就是洞察力,观察Log,操作等,注意一些细微的差异,发现一些隐藏的线索等。当然,这与经验不同,不是那么容易就能培养出来的!

9. 具体的方法和工具

a. 编译
很显然,要想用日志等方法,就要修改源码,添加日志,就要编译。整体编译Android可以用make,整体编译过一次后就可以局部编译,进入到某个带有Android.mk文件的目录运行mm就可以把此目录重新编译成apk, jar或so
b. 运行
编译好后,就要把新编译出来的Apk或jar或so运行起来以看到不同。可以直接把apk,jar和so通过adb push 到手机中(apk到/system/app, jar到/system/framework, so到/system/lib)。或者用mm snod命令重新生成system.img,然后再使用(模拟器可以这样做)。
c. 调试工具

  • Apk用Eclipse就可以直接调,前提要能编译过
  • jar也要用Eclipse来调试
  • so因为都是Native C/C++代码,所以要用GDB来调试。手机中运行gdbserver,PC上用gdb调试编译出来的symbols/下面的库,gdb和gdbserver用过手机中指定的端口来通信。
转载:http://blog.csdn.net/hitlion2008/article/details/7578178

Android生存指南:解Bug策略和思路相关推荐

  1. 生存指南2服务器无响应,生存指南2 游戏中遇到的BUG怎么办 生存指南2BUG汇总

    生存指南2 游戏中遇到的BUG怎么办 生存指南2BUG汇总 <生存指南2>玩家在游戏中会遇到各种BUG,下面就为大家带来部分BUG的解决方法. 1.闪退&无法启动游戏(目前无解,感 ...

  2. 新晋总监生存指南五——人才运营机制

    书接上文:新晋总监生存指南四--项目执行指南 在大学毕业的时候,恩师跟我们扯犊子说了一个故事(这里用四川话): 有一天一个女同学跟他说,不知道毕业了该干撒子,不知道该怎么办. 恩师突然一怔,想到貌似自 ...

  3. android WebView详解,常见漏洞详解和安全源码(下)

    上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑.  上篇:android WebView详解,常见漏洞详解和安全源码(上)  转载请注明出处:http ...

  4. 内外兼修:程序员的成长之路+软技能 代码之外的生存指南

    .........代码之外的生存指南........... 内容简介  · · · · · · 这是一本真正从"人"(而非技术也非管理)的角度关注软件开发人员自身发展的书.书中论述 ...

  5. 【读书笔记】程序员们需读的一本书《软技能:代码之外的生存指南》 | 约翰 Z.森梅兹

    这本书用微信读书第二小的字体来看也有一千多页,看了蛮久了.从年前还是在学校时候就开始刷了,讲了十几个章节,分版块来介绍程序员这条路上应当注意的一些事项.各方面都考虑到了,除了社会关系(感情之类的)基本 ...

  6. 运维必备生存指南 |《王者荣耀》乱象竟然也能反映出运维生存现状?

    <王者荣耀>已成为社会现象级手游,随之问题接踵而来.部分小学生沉迷后为买游戏道具刷爆家长银行卡.为抢夺游戏中"buff(增益效果)"大打出手. 这些问题怎么产生? 责任 ...

  7. Android MVP 详解(上)

    作者:李旺成 时间:2016年4月3日 "Android MVP 详解(下)"已经发布,欢迎大家提建议. MVP 在 Android 上的使用其实已经有挺长一段时间了,长到似乎有点 ...

  8. 软件技能代码之外的生存指南笔记

    软件技能代码之外的生存指南笔记 职业 2.绝不要做他人都在做的事 大多数软件开发人员从职业生涯一开始就犯了几个严重的错误,其中最大的错误就是没有把自己的软件开发事业当作一桩生意来看待. 把雇主当做是你 ...

  9. Android Linker详解(二)

    Android Linker详解(二) Android Linker详解(二) 本文目的 So的链接 So重定位 总结 本文目的 接上篇Linker源码详解(一),本文继续来分析Linker的链接过程 ...

最新文章

  1. node.js java web_Node.js 做 Web 后端优势为什么这么大?
  2. 数据结构和算法分析:第一章 引论
  3. Java Review - 并发编程_ThreadPoolExecutor原理源码剖析
  4. style和theme:一组属性值
  5. mysql function函数_详解MySQL如何按表创建千万级的压测数据
  6. oracle 数据分页功能,Oracle数据库实现分页功能
  7. 【Spring Cloud】注册中心-Euraka
  8. Vim 激荡 30 年发展史
  9. android状态栏自定义,如何自定义Android状态栏颜色
  10. 简述软件黑盒测试的方法,简述什么是黑盒测试方法
  11. 1. 通用基础算法(1.1枚举算法/1.2递推算法/1.3递归算法)
  12. html5页面关闭的回调函数,js回调函数例子 js 回调函数问题的执行结果想作为返回值...
  13. ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)
  14. 梦殇 chapter one
  15. 获取及计算可滚动元素高度:区分clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop
  16. Nodulus玩法介绍
  17. 声音与噪声(分贝、声功率、声强和声压)
  18. 爬虫练习(3)-- 36Kr 站点正则和 ajax 混合
  19. Python在操作系统层面上的操作
  20. 在javascript中使用正则表达式来验证:E-Mail,账号,出生日期,姓名...

热门文章

  1. 推荐算法炼丹笔记:标签工程
  2. 七夕|情人节情书指南
  3. 营销增长大揭密丨市场人应具备的101种硬核营销姿势
  4. 网易云信携手小天才电话手表 打造视频通话体验的行业标杆
  5. gulp 常用插件汇总
  6. 总结一些常用Android adb 命令
  7. 第三章 经典场景设计
  8. eclipse 安装svn插件 及试用
  9. linux下测试RTC驱动相关的命令date和hwclock常见用法简介
  10. ASP.NET MVC:通过 FileResult 向 浏览器 发送文件