Android上的bug定位(troubleshooting)

Google Pixel蓝牙调试全攻略:从adb抓取HCI log到问题定位(附常见错误排查) 本文提供了一份详尽的Google Pixel蓝牙调试指南,重点讲解如何通过adb抓取和分析Bluetooth HCI snoop log。内容涵盖从环境准备、无Root权限下利用Bug Report获取日志,到使用Wireshark解析日志并定位蓝牙连接失败、音频卡顿等典型问题的全流程,并附有常见错误排查清单,是蓝牙开发与测试工程师的实用手册。 阅读详情

Android上的bug定位(troubleshooting) 收藏
原文地址:http://swverification.blog.sohu.com/141315680.html

对于android上的bug定位的文档很少,因为应用程序千差万别的,出现的问题也不尽相同,不过也是有规律可循,大的方向定位是可以做到的,我们对应用程上的问题可以得到相关的信息。

    首先,要对Java的Throwable比较熟悉,因为Android上的应用和服务都是Java的代码,它的Error和 Exception都是沿用Java的,比如Error有 AssertionError,VirtualMachineError,OutOfMemoryError和其他的Error类。Exception有 RuntimeException和IOException,请参考相应的文档查询,Adb logcat里面会把出现错误的Error或Exception打印出来。

    分类1, 应用程序错误 ,什么样子的?大家如果用过android手机会碰到过xxxx process意外停止,Force close的对话框弹出来。这一般都是应用程序错误。这个过程一般有 uncaughtException,crash(TAG,e),handleApplicationError,sendSingal(SIGQUIT),logThreadStacks 然后会在/data/anr/traces.txt追加process crash信息。

    举例:

    11-04 08:55:37.114 W/AudioFlinger( 1032): write blocked for 55 msecs
11-04 08:55:37.334 W/dalvikvm( 1103): threadid=35: thread exiting with uncaught exception (group=0x2aadda08)
11-04 08:55:37.354 E/AndroidRuntime( 1103): Uncaught handler: thread WindowManagerPolicy exiting due to uncaug
ht exception
11-04 08:55:37.374 E/AndroidRuntime( 1103): *** EXCEPTION IN SYSTEM PROCESS.  System will crash.
11-04 08:55:37.394 I/global  ( 1566): Default buffer size used in BufferedReader constructor. It would be bett
er to be explicit if an 8k-char buffer is required.
11-04 08:55:37.464 E/AndroidRuntime( 1103): java.lang.NullPointerException
11-04 08:55:37.464 E/AndroidRuntime( 1103):  at android.graphics.Canvas.throwIfRecycled(Canvas.java:954)
11-04 08:55:37.464 E/AndroidRuntime( 1103):  at android.graphics.Canvas.drawBitmap(Canvas.java:980)
11-04 08:55:37.464 E/AndroidRuntime( 1103):  at com.android.internal.policy.impl.UnlockSliderView$AbstractView
State.drawCanalBmp(UnlockSliderView.java:851)
11-04 08:55:37.464 E/AndroidRuntime( 1103):  at com.android.internal.policy.impl.UnlockSliderView$AbstractView
State.drawSlideCanalBmp(UnlockSliderView.java:822)
11-04 08:55:37.464 E/AndroidRuntime( 1103):  at com.android.internal.policy.impl.UnlockSliderView$ViewStateSli
ding.drawSlideImage(UnlockSliderView.java:1798)
11-04 08:55:37.464 E/AndroidRuntime( 1103):  at com.android.internal.policy.impl.UnlockSliderView$ViewStateSli
ding.onDraw(UnlockSliderView.java:1766)
11-04 08:55:37.464 E/AndroidRuntime( 1103):  at com.android.internal.policy.impl.UnlockSliderView.onDraw(Unloc
kSliderView.java:507)

    分类2,Java application Hang ,当应用程序停止响应事件比如按键/Touch的时候,会诸如如下流程,broadcastTimeout,appNotRespondingLocked(frameworks/base/services/java /com/android/server/am/ActivityManagerService.java),sendSingal(SIGQUIT) (frameworks/base/core/java/android/os/Process.java),SingalCatcherThreadStart(dalvik/vm/SignalCatcher.c),logThreadStacks() (dalvik/vm/SignalCatcher.c)然后会在/data/anr/traces.txt追加process crash信息。

    举例:

11-04 15:02:00.795 I/dalvikvm( 1270): processname:com.android.phone
11-04 15:02:00.795 I/dalvikvm( 1270): crashstring:Java Crash/Hang (SIGQUIT)
11-04 15:02:00.795 I/dalvikvm( 1270): crashlog:

    其他的android错误,通常开发人员会用Log.e来甄别这些信息。

    Dalvik/ Core Libraries的错误

    类似于01-06 17:27:24.526: INFO/DEBUG(963): crashlog:
01-06 17:27:24.526: INFO/DEBUG(963): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-06 17:27:24.526: INFO/DEBUG(963): Build fingerprint: 'xxxxbuild/test-
keys'
01-06 17:27:24.526: INFO/DEBUG(963): pid: 2539, tid: 2539  >>> /system/bin/vold <<<
01-06 17:27:24.526: INFO/DEBUG(963): signal 11 (SIGSEGV), fault addr 00000000
01-06 17:27:24.526: INFO/DEBUG(963):  r0 00000000  r1 00020000  r2 00000000  r3 80808080
01-06 17:27:24.526: INFO/DEBUG(963):  r4 00000000  r5 00000000  r6 beff7490  r7 000111cc
01-06 17:27:24.526: INFO/DEBUG(963):  r8 00000000  r9 00000000  10 00000000  fp 00000000
01-06 17:27:24.526: INFO/DEBUG(963):  ip 00000000  sp beff7468  lr 0000a6c1  pc afe0e1b8  cpsr 40000010
01-06 17:27:24.576: INFO/DEBUG(963):          #00  pc 0000e1b8  /system/lib/libc.so
01-06 17:27:24.576: INFO/DEBUG(963):          #01  pc 0000a6be  /system/bin/vold
01-06 17:27:24.576: INFO/DEBUG(963):          #02  pc 0000a858  /system/bin/vold
01-06 17:27:24.576: INFO/DEBUG(963):          #03  pc 0000a918  /system/bin/vold
01-06 17:27:24.586: INFO/DEBUG(963):          #04  pc 000097b2  /system/bin/vold
01-06 17:27:24.586: INFO/DEBUG(963):          #05  pc 0001fd7a  /system/lib/libc.so
01-06 17:27:24.586: INFO/DEBUG(963):          #06  pc 0000bcd2  /system/lib/libc.so
01-06 17:27:24.586: INFO/DEBUG(963):          #07  pc b000157e  /system/bin/linker
01-06 17:27:24.586: INFO/DEBUG(963): code:
01-06 17:27:24.586: INFO/DEBUG(963):  afe0e1a8 
01-06 17:27:24.586: INFO/DEBUG(963):  e3120003
01-06 17:27:24.586: INFO/DEBUG(963):  e28cc001

    。。。

    具体调用过程__linker_init()  (bionic/linker/linker.c) -> debugger_init() (bionic/linker/debugger.c)-> debugger_signal_handler()Called when a signal is received from Kernel, uses socket() to connect to The “android:debuggerd” socket, and write()s to the socket    -> main()(system/core/debuggerd/debuggerd.c)The debuggerd daemon creates a socket server android:debuggerd and loops forever,waiting for some client to write into the socket  -> handle_crashing_process()->engrave_tombstone() (system/core/debuggerd/debuggerd.c)Dump stack trace and registers in /data/tombstone/ folder在/data/tombstone/会看到这些东西

    kernel错误 :比较难定位,如果系统发生crash现象,可以开机之后取得最后一次的kernel日志来定位,可以在/proc/last_kmsg得到相关的东西来定位系统是不是kernel问题。在日志里面通常最后会有Kernel panic 。。。。

    Modem的问题 ,这个跟平台有关系,比如G1是高通平台,如果发生在Modem的问题crash了,你可以到/proc/last_amsslog 找到,发给高通解决。比如从/proc/last_kmsg得到

05-29 09:09:02.409 <0>[54026.002654] Kernel panic - not syncing: Modem has crashed... 这样可以定位到modem的问题,找到/proc/last_amsslog 相关信息,不过这个是二进制文件的。

 

总结:如果是用户程序 Exception或者Dalvik Error Invoking Runtime都会通过AcitivityMangerService发出SIGQUIT信号给process,再调用SignalCatcher.c再把crashed process信息放在/data/anr/traces.txt里面。

如果是SYSTEM process????或者通过Log.e(TAG,str,trowable)会直接报告exception到logcat里面。

如果是Dalvik Error, Invoking debuggerd/C code/LibC Error, 会调用Tombstone,然后把信息打印到/data/tombstones目录里面。

如果是kernel错误,会直接放到/proc/last_kmsg文件(下次重启后会有)

如果是Modem错误,会直接有/proc/last_amass文件出现(高通平台)。

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/hellolwl/archive/2011/03/23/6270811.aspx

Ionic跨平台App故障排查:四层模型与CDP深度调试实战 Ionic作为基于WebView的跨平台框架,其Bug常源于Web层、框架层、桥接层与原生层的交界地带。理解其运行原理——尤其是生命周期钩子触发时机、Capacitor桥接机制及WebView渲染约束——是高效Troubleshooting的前提。技术价值在于将模糊的‘白屏’‘卡死’转化为可定位、可复现、可自动化的诊断问题。典型应用场景包括iOS分屏白屏、Android热更新样式错乱、插件Promise静默挂起等。借助Chrome DevTools Protocol(CDP)和Safari develope 阅读详情

相关推荐

关于自制的《航空学报》latex模板(非官网模板)

《航空学报》的官网只提供了word模板,并且该期刊投稿只需要pdf版本不需要源文件。为方便latex爱好者撰写论文,提供该模板及说明给广大科研人士~

qq_37105055的博客 4692

Uncaught handler: thread main exiting due to uncaught exception

学习Intent时写了一个小例子:一个Activity中按button跳到另一个Activity。然后点了button后报错。 我的错误的原因是: (1)  XML文件中标签warning: This text field does not specify an inputType or a hint。加入android:inputType="number|phone"属性后warning消失

我的网络笔记本 3297

TensorRT(C++)部署 Pytorch模型

众所周知,python训练pytorch模型得到.pt模型。但在实际项目应用中,特别是嵌入式端部署时,受限于语言、硬件算力等因素,往往需要优化部署,而tensorRT是最常用的一种方式。本文以yolov5的部署为例,说明模型部署在x86架构上的电脑端的流程。(部署在Arm架构的嵌入式端的流程类似)。

女神sha手的博客 5404

TabHost MonkeyTest 死机问题 Uncaughthandler:thread main exiting due to uncaught exce

做monkey测试时,总碰到一个死机的问题 2515:30:19.010E/AndroidRuntime(2878):Uncaughthandler:thread main exiting due to uncaught exception 09-2515:30:19.026E/AndroidRuntime(2878):java.lang.NullPointerException 09-25...

songwin88的博客 213

YOLOv8实战:用Labelme标注自定义数据集并训练分割模型(附完整代码)

本文详细介绍了使用Labelme标注自定义数据集并训练YOLOv8实例分割模型的完整流程。从环境搭建、数据标注与格式转换,到模型训练、调优、验证及部署,提供了实战代码和调优建议。文章还探讨了如何结合追踪目标技术,实现视频流中的实例分割与目标追踪,为计算机视觉应用提供了一套可复制的解决方案。

552

Eclipse 数据空间组件(EDC)项目介绍

在当今数字经济的背景下,数据成为了新的“石油”。但与石油不同的是,数据可以无限共享且再生。然而,如何在保持数据主权的前提下实现高效、安全的数据共享,成为了企业和组织面临的主要挑战。这时,**Eclipse 数据空间组件(Eclipse Dataspace Components, EDC)**应运而生,它为企业在多方参与的数据交换中提供了一个标准化、可扩展的解决方案。数据空间不仅是一个多组织间的数据共享协议,还是一套支撑这些协议运行的技术基础设施。

m0_74331272的博客 4597

android 错误: thread exiting with uncaught exception

threadid=3: thread exiting with uncaught exception  Uncaught handler: thread main exiting due to uncaught exception java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams   该错误一

xxs1984的专栏 7068

Androiud安卓链接sqllite的代码使用案例

【代码】Androiud安卓链接sqllite的代码使用案例。

laterstage的博客 1328

android开发如何快速定位bug_Android上的bug定位(troubleshooting)

Android上的bug定位(troubleshooting)详见软件测试小屋:http://swverification.blog.sohu.com对于android上的bug定位的文档很少,因为应用程序千差万别的,出现的问题也不尽相同,不过也是有规律可循,大的方向定位是可以做到的,我们对应用程上的问题可以得到相关的信息。首先,要对Java的Throwable比较熟悉,因为Android上的应用...

weixin_39793553的博客 196

FM20S用户手册--Linux系统启动卡制作及系统固化

评估板出厂时,默认提供一张配套的Micro SD卡,此卡为可正常使用的Linux系统 启动卡。评估板断电,将Linux系统启动卡插入评估板Micro SD卡槽,根据评估底板丝印将 启动方式选择拨码开关拨为1010(1-4).此档位为Micro SD启动模式。使用Linux 系统启动卡启动系统时,将使用此目录的BOOTbn文件启动FSBL和U-Boot。Linux系统启动卡制作时,已将固化系统的脚本文件mkemmcboot.sh拷贝至Linux系 统启动卡文件系统的"/opt/tools/"目录下。

创龙,嵌入式一体化解决方案商 302

游戏引擎揭秘:大厂为何死磕自研?

游戏引擎本质与商业价值解析 游戏引擎是集成了渲染、物理、动画等核心功能的开发工具包,其价值在于让开发者免于重复编写底层代码,专注于游戏内容创作。商业引擎(如Unity/Unreal)虽降低了开发门槛,但头部厂商仍坚持自研引擎,主要基于以下考量: 经济性:长期项目分摊自研成本后,比商业引擎分成更划算; 可控性:完全掌握底层代码,能针对性优化核心玩法需求; 技术壁垒:专属引擎成为厂商的竞争优势,如米哈游的跨平台渲染技术; 项目适配:超大型游戏(开放世界/MMO)需要深度定制解决方案。 这种"短期高投入

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 263

Android上的bug定位(troubleshooting) 分享

自http://swverification.blog.sohu.com/141315680.html     对于android上的bug定位的文档很少,因为应用程序千差万别的,出现的问题也不尽相同,不过也是有规律可循,大的方向定位是可以做到的,我们对应用程上的问题可以得到相关的信息。     首先,要对Java的Throwable比较熟悉,因为Android上的应用和服务都是Jav

ACM Dream 945

SwinTransformer改进(5):与CBAM结合的视觉模型

这个模型的核心思想是将Swin Transformer的强大特征提取能力与CBAM的注意力机制相结合,以提升模型对重要特征的关注度。​​CBAM模块​​:包含通道注意力和空间注意力两个子模块​​Swin Transformer主干网络​​:作为基础特征提取器​​集成结构​​:在Swin Transformer的不同阶段插入CBAM模块使用移动窗口(Moving Window)机制减少计算量层次化设计,特征图逐渐缩小,通道数逐渐增加在不同阶段使用Patch Merging进行下采样。

2401_82355416的博客 688

CrossPoint 固件测试与调试完全指南:本地检查、设备端日志与高效 Bug 上报

CrossPoint 是运行在真实硬件(Xteink X4 / X3、M5Stack Paper Mono 等 ESP32 系墨水屏阅读器)上的开源电子书固件,因此它的调试工作流通常由"本地构建检查"和"设备端串口日志"两部分组成。这篇指南以仓库的 [测试与调试文档](https://link.gitcode.com/i/658d84186424358bc16ab2fd4b4654d1) 为主线,

gitblog_00274的博客 155

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TuxGuitar 开发环境搭建实战指南:Android Studio 与 Eclipse IDE 完整配置

> 本指南基于 TuxGuitar 官方开发文档 [docs/IDEs.md](https://link.gitcode.com/i/6654bd305754e1ac656ad20a58048ec4),系统讲解如何在 Linux 环境下使用 Android Studio 导入并构建 TuxGuitar Android 应用,以及如何在 Eclipse 中克隆仓库、安装 SWT 依赖、导入 Linu

gitblog_00639的博客 1079

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

react-native-bottom-sheet 手势冲突排查指南:Touchable 失效、横向列表与自定义手势的 Android 解决方案

在 React Native 开发中使用 `@gorhom/bottom-sheet` 时,开发者最常遇到的三类问题是:Android 上内容区域内的按钮(Touchable)点击无响应、横向 FlatList/ScrollView 滑动异常、以及自定义组件手势与 Bottom Sheet 拖拽手势相互抢占。这些问题的根源都在于 Bottom Sheet 用手势处理器包裹了内容与把手。本文以 re

gitblog_00140的博客 296

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: 玩转ptrace(转)
下一篇: android使用socket使底层和framework通信
gracioushe
博客等级 码龄25年 62粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值