Android常用调试命令记录

Posted zhanghui_cuc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android常用调试命令记录相关的知识,希望对你有一定的参考价值。

抓日志

同时抓adb日志和kernel日志

adb shell
logcat -c
logcat -v time > /sdcard/logcat.log | cat /proc/kmsg > /sdcard/kernel.log

也可以用dmesg抓kernel日志,dmesg和cat /proc/kmsg的区别在于dmesg命令每次使用都会打印出环形缓冲区的所有信息,而cat /proc/kmsg只会打印出每次新的环形缓冲区的信息

mount

adb shell
mount -o remount,rw /system

关闭selinux

setenforce 0

查看谁持有wakelock

dumpsys power

Android自带native进程内存泄露的调试工具

adb root
adb wait-for-device root
adb remount
adb wait-for-device shell setprop libc.debug.malloc 40
adb wait-for-device shell setprop libc.debug.malloc.program mm-qcamera-daemon
adb wait-for-device shell setprop libc.debug.malloc.minalloclim 512
adb wait-for-device shell setprop libc.debug.malloc.maxprocsize 314570000
adb wait-for-device shell stop
adb wait-for-device shell start

找到想要调试的daemon pid,让程序重新启动,加载debug malloc库, 例如

adb shell ps |grep 'mm-qcamera-daemon'
adb shell kill -9 <pid_of_mm-qcamera-daemon>

因为调试的daemon重启了,需要再次查找pid,同时发送signal 28到调试的daemon让调试代码初始化

adb shell ps |grep 'mm-qcamera-daemon'
adb shell kill -9 <pid_of_mm-qcamera-daemon>

运行调试的daemon case(比如:进入camera, 拍照、录像,退出camera),然后再次发送signal 28到调试的daemon,进行内存泄漏匹配,典型的输出如下:

bionic/libc/bionic/malloc_debug_check.cpp: malloc_sigaction
void malloc_sigaction(int, siginfo_t*, void*) got 28 signal from PID: 19923 (context:ffd30d90)
Process under observation:/system/bin/mm-qcamera-daemon
Maximum process size limit:314570000 Bytes
Won't print allocation below 512 Bytes
Total count: 45711922
Start dumping allocations of the process /system/bin/mm-qcamera-daemon
+++ *** +++ *** +++ *** +++ *** +++ *** +++ *** +++ *** +++ ***
bionic/libc/bionic/malloc_debug_check.cpp: snapshot_report_leaked_nodes
obj 0xe14e8c00, size 2080
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
#00 pc 00007836 /system/lib/libc_malloc_debug_leak.so (chk_malloc+77)
#01 pc 00003e30 /system/vendor/lib/liboemcamera.so
………
#15 pc 0001fff4 /system/vendor/lib/libmmcamera2_imglib_modules.so
(module_afs_port_event_func+1739)
------------------------------
Total Pending allocations after last snapshot: 41600
*** +++ *** +++ *** +++ *** +++ *** +++ *** +++ *** +++ *** +++
Completed dumping allocations of the process /system/bin/mm-qcamera-daemon

重复上一步,再次发送signal 28到调试的daemon,可以抓取不同的点,进行内存泄漏检测


多媒体相关

dump native数据

在进行一些framework层的调试工作时,尤其是涉及到音频、视频、图像功能时,会需要做一些数据dump工作,整理一个常用工具函数如下

static void DumpData(const void *addr, int size) {
    FILE *fp;
    char filename[128];
    memset(filename, 0, 128);
    int a = rand();
    sprintf(filename, "/data/%d_capture.raw", a);
    ALOGE("Dump : /data/%d_capture.raw", a);

    fp = fopen(filename, "wb");
    if (!fp) {
        ALOGE("Fail to open file !!");
        return;
    }

    fwrite(addr, size, 1, fp);
    fclose(fp);
}

查看ffmpeg支持的codec和format列表

ffmpeg -codecs
ffmpeg -formats

下载网络DASH流

wget -r -nd -np -nH -R index.html http://dash.akamaized.net/dash264/TestCases/1a/netflix/ -P '~/dashclone/' 

欢迎关注我的公众号灰度五十,分享各类音视频、移动开发知识~

文章帮到你了?可以扫描如下二维码进行打赏,打赏多少您随意~

以上是关于Android常用调试命令记录的主要内容,如果未能解决你的问题,请参考以下文章

使用 pdb 进行调试

Android开发常用代码片段

[转] Android学习系列(29)--App调试的几个命令实践

记录C#常用的代码片段

python调试:pdb基本用法(转)

Android调试常用命令