android常用调试命令记录(代码片段)

zhanghui_cuc zhanghui_cuc     2022-12-21     710

关键词:

抓日志

同时抓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/' 

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

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

adb常用命令总结(代码片段)

ADB命令使用大全转载地址ADB是什么ADB的全称为AndroidDebugBridge:android调试桥梁,下图为Android官方对adb的介绍:可以看出,Android的初衷是用adb这样的一个工具来协助开发人员在开发android应用的过程中更快更好的调试... 查看详情

android调试——教你用dumpsys命令调试(代码片段)

“这一篇就聊聊dumpsys比较常用的命令“dumpsys服务基本用法adbshelldumpsys[-ttimeout][--help|-l|--skipservices|service[arguments]|-c|-h]查看可与dumpsys配合使用的系统服务的完整列表,请使用以下命令:adbshelldumpsys-l某些服务可能允许您传... 查看详情

正则项常用命令记录(代码片段)

匹配包含特定字符的行^(.*)34(.*)$匹配空行^\\r\\n 查看详情

正则项常用命令记录(代码片段)

匹配包含特定字符的行^(.*)34(.*)$匹配空行^\\r\\n 查看详情

android开发常用的adb命令(代码片段)

作者:Aaron主页:http://www.wxtlife.com/2017/09/07/Android-adb-commond/微信文章:https://mp.weixin.qq.com/s/IKN6KLAhO9rO-uIXKv7u2g欢迎订阅我的公众号adb在开发中调试是很常用的命令,下面就来说说常用的adb命令。简化adb连接命令如果... 查看详情

常用adb命令记录(代码片段)

...adb命令最详细最准确的描述,见:https://developer.android.com/studio/command-line/adb连接设备adbdevices-l:-ldetailsadb-eshell:connectemulatoradb-dshell:connectdevicesadb-sxxxxxpm查看所有package安装的路径,以及apk路径(就可以用adbshellpullxxxpat... 查看详情

gdb程序调试常用命令(代码片段)

调试之前若要在GDB中调试程序在编译时需要加上调试信息在GCC中添加的方法GCC-ga.c-oa.exe或下面提供更符合GDB的调试信息GCC-ggdba.c-oa.exe运行流程命令作用-start开始执行程序,在main函数第一句处停止-continue、-c从当前位置继续执... 查看详情

adb常用命令总结(代码片段)

1前言​ADB(AndroidDebugBridge)即Android调试桥,采用监听SocketTCP端口的方式通讯。连接手机有2种方式:有线连接、无线连接。​(1)有线连接​使用数据线连接手机后,在【开发人员选项】中开启【USB调试】,并在【选择USB配置... 查看详情

arthas常用命令记录(代码片段)

...Ohttps://arthas.gitee.io/arthas-boot.jar启动arthasjava-jararthas-boot.jar常用命令keymap:快捷键及自定义快捷键sc:searchclass搜索类sm:searchmethod搜索当前类的方法classloader:查看类加载器jad:在线反编译thread:查看当前线程并 查看详情

ffmpeg常用的命令记录(代码片段)

在使用ffmpeg工具的时候有些常用的命令需要记录一下:进行mp4转yuv命令如下:ffmpeg-i1.mp41.yuv播放yuv图像命令如下:ffplay-frawvideo-video_size1920x1080-i1.yuv将mp4文件解码成h264文件命令如下:ffmpeg-i1.mp4-vcodeccopy-bsfh264_mp4toannexb-fh2641.h264从... 查看详情

latex入门——导入图片常用命令记录(代码片段)

命令\\beginfigure[H]\\centering\\includegraphics[width=1\\textwidth,height=1.2\\textwidth,trim=2.5cm000]图片名字.后缀名\\caption名字\\label引用名\\endfigure记录–[H]是用来固定图片位置,不漂浮的。配合\\usepackagefloa 查看详情

windwos常用命令(学习记录)(代码片段)

文章目录前言clipclsdirdoskeyexploreripconfignetnetstatnslookuppingsysteminfotasklisttypewhere前言先开个坑,打算将一些遇到的windows命令写到此文章内因为每次操作结束就忘记了命令,所以还是用文章来记忆一下可以使用/接参数,也... 查看详情

windwos常用命令(学习记录)(代码片段)

文章目录前言clipclsdirdoskeyexploreripconfignetnetstatnslookuppingsysteminfotasklisttypewhere前言先开个坑,打算将一些遇到的windows命令写到此文章内因为每次操作结束就忘记了命令,所以还是用文章来记忆一下可以使用/接参数,也... 查看详情

windwos常用命令(学习记录)(代码片段)

文章目录前言dirpingwhere前言先开个坑,打算将一些遇到的windows命令写到此文章内因为每次操作结束就忘记了命令,所以还是用文章来记忆一下有些参数没用过就不写了,查阅官方文档才是真理,此文章只是学习记... 查看详情

idea个人常用配置记录.md(代码片段)

目录一、常用快捷键二、技巧一、常用快捷键调试Ctrl+D:调试运行F8:跳到下一步F7:进入方法内部Shift+F8:跳到下一个断点或者跳出方法重构?+Shift+V:访问历史粘贴板?+Shift+.:折叠指定方法、代码块?+Shift+-:折叠所有方法?+Shift++... 查看详情

git常用命令(代码片段)

使用git恢复未提交的误删数据不小心将项目中一个文件夹删除还未提交,或者已经提交,此时想要恢复数据该怎么办?git记录每次修改head的操作,gitreflog/gitlog-g可以查看所有的历史操作记录,然后通过gitreset命令进行恢复。 ... 查看详情

android调试工具adb命令学习(代码片段)

查看Android版本号adbshellgetpropro.build.version.releasegetpropro.build.version.release5.1查看Android版本号adbshellgetpropro.build.version.sdkgetpropro.build.version.sdk22 查看详情

记录kvm虚拟机常用操作管理命令(代码片段)

环境说明centos7中的KVMNAT方式是kvm安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。检查当前的网络设置#virshnet-list--alldefault是宿主机安装虚拟机支持模块的时候自动安装... 查看详情