【android】 日志获取

日志信息:

  1. boot日志,通过串口获取
  2. 内核日志:通过dmesg 获取
  3. 系统日志:通过logcat,dumpsys获取
  4. APP日志: 通过am命令获取

1.boot日志

boot日志是android 从上电开始的输出,主要通过串口获取。

2.内核日志dmesg

获取方法:命令行

样例:【cat /proc/kmsg】【dmesg -c】

内核日志,主要是内核阶段打印,当需要调试驱动时,可以使用"kernel动态调试[dynamic_debug ]"功能

  1. kernel编译阶段打开
    CONFIG_DEBUG_FS=y
    CONFIG_DYNAMIC_DEBUG=y

     

  2. 输入需要调试的文件
    adb root
    adb remount #重新挂载,否则文件是只读的无法写入
    adb shell
    echo -n "file q6adm.c +p" > /sys/kernel/debug/dynamic_debug/control #添加调试文件
    echo -n "file q6adm.c -p" > /sys/kernel/debug/dynamic_debug/control #关闭调试文件

     

  3. 调整kernel打印等级
    cat /proc/sys/kernel/printk #查看kernel日志等级
    
    7 4 1 7
    
    echo 8 4 1 7 > /proc/sys/kernel/printk #更改kernel日志等级

    (1)第一个参数 7表示小于7优先级消息才会被输出到控制台。

    (2)第二个参数4 表示默认的printk消息优先级别,即printk(“hell world”);优先级为4, 由于4<7,故可以被打印到控制台。

    (3)第三个参数1 表示可接收的最高优先级,当printk disable控制台输出时,设置第一个参数为1,但是,从内核等级来看,还有优先级0,这个是printk最高级优先级,一般用于内核严重消息打印。比如内存错误或者 watchdog reset.也可以设置第一个和第三个参数为0

    (4)第四个参数7 默认控制台优先级,即第一个参数的默认优先级。

  4. dmesg 获取日志即可
    adb shell dmesg -c  > kernel.log

     

3.系统日志logcat

获取方法:命令行,android studio

样例:

adb logcat -d -v time -b "main"   >  main.txt
adb logcat -d -v time -b "system" >  system.txt
adb logcat -d -v time -b "events" >  events.txt

logcat是andriod系统从kernel启动完成后,Logger系统收集的log,包含framework,app的日志,由于日志较多,推荐使用android studio来分析实时的日志,如果条件不允许,则使用命令行获取日志,再慢慢分析。

logcat Google 详细介绍

3.1 logcat日志分类

logcat日志分类
radio查看包含无线装置/电话相关消息的缓冲区无线/电话相关的Log信息
events查看已经过解译的二进制系统事件缓冲区消息。系统事件相关的Log信息
main查看主日志缓冲区(默认),不包含系统和崩溃日志消息。大部分应用级别的Log信息都在这里
system查看系统日志缓冲区(默认)低级别的系统调试Log信息
crash查看崩溃日志缓冲区(默认)。 
all查看所有缓冲区。 
default报告 main、system 和 crash 缓冲区。 

3.2 logcat输出控制 "-v "后的参数

logcat输控制
brief显示优先级、标记以及发出消息的进程的 PID。
long显示所有元数据字段,并使用空白行分隔消息。
process仅显示 PID。
raw显示不包含其他元数据字段的原始日志消息。
tag仅显示优先级和标记。
thread旧版格式,显示优先级、PID 以及发出消息的线程的 TID。
threadtime显示日期、调用时间、优先级、标记、PID 以及发出消息的线程的 TID。
time显示日期、调用时间、优先级、标记以及发出消息的进程的 PID。

3.3 logcat日志中的等级标识

等级标识
V详细(最低优先级)
D调试
I信息
W警告
E错误
F严重错误
S静默(最高优先级,绝不会输出任何内容)

 

4.系统日志dumpsys

dumpsys google 详解

获取方式:命令行

样例:adb shell dumpsys [-t timeout] [--help | -l | --skip services | service [arguments] | -c | -h]

dumpsys可以获取系统的服务信息,可以使用dumpsys -l 查看dumpsysy支持查看的服务列表。

例如:

  1. dumpsys input:输入设备(如键盘和触摸屏)的状态以及输入事件的处理
    adb shell dumpsys input

     

  2. dumpsys gfxinfo:进行新能测试
    adb shell dumpsys gfxinfo package-name framestats

     

  3. dumpsys netstats:设备启动以来收集的网络使用情况统计信息
    adb shell dumpsys netstats detail

     

  4. dumpsys procstats:查看内存使用情况

    adb shell dumpsys procstats --hours 3
    #adb shell dumpsys meminfo package_name|pid [-d]
    adb shell dumpsys meminfo com.google.android.apps.maps -d

     

5.APP日志

5.1 am dumpheap

Android am 命令使用

获取方法:命令[adb shell am dumpheap [参数] <process>]

样例:

adb shell am dumpheap com.android.browser /data/local/tmp/test.hprof
#获取内存快照(后缀名必需为.hprof)
adb pull /data/local/tmp/test.hprof ./test.hprof

PC端使用命令:hprof-conv e:\test.hprof e:\test1.hprof进行文件转化,使用mat工具对内存进行查看分析。

6.日志工具

6.1 工具Traceview

Traceview是android平台配备一个很好的性能分析的工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。

6.2 bugreport

google官方分析工具,后期补充

 

 

<think>好的,我需要帮助用户找到CTS报错的解决方法或原因。首先,我需要理解CTS是什么。CTS代表Compatibility Test Suite,是Android的兼容性测试套件,确保设备符合Google的标准。用户遇到了CTS报错,想知道如何解决和分析原因。 根据用户提供的引用资料,引用[4]提到CTS问题的处理步骤:首先确认补丁是否应用,或者是否由于系统定制导致问题。我需要先建议用户检查这两个方面。比如,查看是否有未应用的谷歌补丁,或者最近的代码改动是否影响了相关模块。 然后,引用[1]和[3]提到了具体的案例,如Camera/NFC模块的问题,或者CarrierApiTest失败的情况。这说明CTS错误可能涉及特定模块,需要定位到具体测试项。用户应该分析测试日志,确定失败的具体用例,然后检查对应的代码或配置。 引用[2]中的RS232C串口通信问题虽然不直接相关,但说明日志分析的重要性。用户需要查看logcat和modem日志,找出错误堆栈或异常信息。例如,在引用[3]中,通过分析logcat和modem日志找到了APDU指令的问题。 接下来,我需要整理解决步骤:确认补丁、检查定制代码、分析测试日志、模块化处理。同时,应该建议用户联系模块负责人,尤其是当问题涉及特定硬件或服务时,如NFC或相机模块。 可能还需要考虑测试环境是否正确,比如设备配置、系统版本是否匹配。此外,复现问题并捕捉详细日志是关键步骤,帮助定位问题根源。 用户可能需要具体的指令或命令来获取日志,比如adb logcat,或者如何运行特定的CTS测试用例。如果有常见的解决方案,比如更新补丁或回退某些修改,也应该提及。 最后,确保回答结构清晰,分步骤说明,并引用相关的资料来支持建议。比如,引用[4]提到的补丁和定制代码问题,引用[3]中的日志分析方法。</think>### CTS报错解决方案及原因分析 #### 一、CTS报错处理流程 1. **确认补丁状态** - 检查是否已应用谷歌官方发布的最新补丁。部分CTS问题可能因未及时更新兼容性补丁导致[^4]。 - 示例:若测试项与安全协议相关(如$APDU$指令传输),需验证补丁是否覆盖相关协议栈。 2. **排查定制代码影响** - 系统定制(如修改`framework`层逻辑或硬件抽象层)可能破坏原有兼容性。 - 案例:`CarrierApiTest`测试失败可能因运营商相关定制代码未正确处理`SIM`卡指令[^3]。 3. **日志分析** - 通过`adb logcat`和`modem log`定位具体错误: ```bash adb logcat -d > cts_log.txt # 导出logcat日志 ``` - 关键信息示例: ```log E/CarrierApiTest: APDU response code mismatch (expected=0x9000, actual=0x6E00) ``` 4. **模块化处理** - 明确问题归属模块(如Camera/NFC/Telephony),转交对应模块负责人分析[^1]。 - 示例:`Camera`相关测试失败需检查驱动兼容性或权限配置。 --- #### 二、常见原因及解决方案 | 问题类型 | 典型表现 | 解决方案 | |---------|---------|---------| | **补丁缺失** | 新版本CTS新增测试项失败 | 同步AOSP最新代码并验证补丁[^4] | | **定制代码冲突** | 特定厂商API返回异常值 | 对比原生代码,修复逻辑差异[^3] | | **硬件兼容性** | 传感器/射频模块测试超时 | 检查驱动实现是否符合CDD要求 | | **权限配置** | 安全相关测试项拒绝访问 | 更新`sepolicy`或`AndroidManifest.xml`权限 | --- #### 三、实践案例参考 1. **案例:`testIccTransmitApduBasicChannel`失败** - **现象**:APDU指令响应码不符合预期(如$0x6E00$表示不支持操作)。 - **分析**:SIM卡通信层未正确处理基础通道指令。 - **解决**:修正`RIL`层(Radio Interface Layer)的APDU指令分发逻辑。 2. **案例:Camera CTS超时** - **现象**:`CameraDeviceTest`因帧率不稳定失败。 - **根因**:定制相机驱动未实现`HAL3`接口的同步模式。 - **修复**:调整驱动缓冲区管理策略,满足$30fps$稳定性要求。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值