Android调试获取Log

1 Android Log

最近遇到一些抓log 的事情,很多来自网上达人的分享,加在一起总结一下:

log文件分为实时打印的,还有状态信息的两种

    实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump, QXDM Log

    状态信息的有:adb shell dmesg,adb shell dumpstate,adb shell dumpsys,adb bugreport


实时log:

adb logcat -b events -v time  打印系统事件的日志,比如触屏事件

tcpdump 是很有用的,对于TCP/IP协议相关的都可以使用这个来抓,

  adb shell tcpdump -s 10000 -w /sdcard/capture.pcap,

  比如抓mms下载的时候的UA profile,browser上网的时候,使用proxy的APN下载,streaming的相关内容包括UA profile等。


状态log:

         其实一个就够了,那就是bugreport(命令adb bugreport>bugreport.log)。

         里面包含有dmesg,dumpstate和dumpsys;


 dmesg(命令adb shell dmesg > ldmesg_kernel.log)是kernel的log,凡是跟kernel相关的,比如driver出了问题(相机,蓝牙,usb,启动,等等)


 dumpstate是系统状态信息,里面比较全,包括手机当前的内存信息、cpu信息、logcat缓存,kernel缓存等等;


 dumpsys这个是关于系统所有进程Process的内容都在这个里面,adb shell dumpsys 这个命令还有更详尽的用法,

         比如adb shell dumpsys meminfo system是查看system这个process的内存信息。

         dumpsys [options]

               meminfo   显示内存信息

               cpuinfo      显示CPU信息

               account     显示accounts信息

               activity 显示所有的activities的信息

               window     显示键盘,窗口和它们的关系

               wifi    显示wifi信息


通过adb logcat/bugreport可以实时的查看系统的log,以及系统的状态信息;

  如何将Log存储下来,保存当时系统运行的情况呢?

  可以通过一些脚本或者执行可执行程序来保存log信息,以便分析问题;


2 抓取实时log 

intmain(intargc,char*argv[])

{

    ……

    //抓取main logcharpath[] ="/xxx/xxx/app_main.log";

    sprintf(cmd,"logcat -v time > %s",path);

    fd = open(path, O_WRONLY|O_TRUNC|O_CREAT,0777);system(cmd);//radio log    ……

    sprintf(cmd,"logcat -b radio -v time > %s",path);system(cmd);//kernel    ……

    sprintf(cmd,"cat /proc/kmsg > %s",path);system(cmd);//bluetoolth logsprintf(cmd,"hcidump -w %s","/data/bt.log");system(cmd);    ……}


3 抓取状态log

intmain(intargc,char*argv[])

{

    //panic log 需要判断/proc/apanic_console是否存在sprintf(cmd,"cp -R %s %s",from_dir,to_dir);system(cmd);//anr log /data/anr/sprintf(cmd,"cp -R %s %s",from_dir,to_dir);system(cmd);//tombstones log /data/tombstones/modem重启复位等sprintf(cmd,"cp -R %s %s",from_dir,to_dir);system(cmd);//mdm log /data/tombstones/mdm/modem重启复位sprintf(cmd,"cp -R %s %s",from_dir,to_dir);system(cmd);

……

}

panic log:

  它表示Linux kernel走到了一个不知道该怎么走下一步的状况,

  http://wenku.baidu.com/view/519c8009844769eae009ed50

tombstone log:    

  当系统发生tombstone的时候,kernel首先会上报一个严重的警告信号(signal),上层接收到之后,

进程的调试工具会把进程中当时的调用栈现场保存起来,并在系统创建了data/tombstones目录后把异常时的进程信息写在此目录里面,

开发者需要通过调用栈来分析整个调用流程来找出出问题的点。

   http://www.eoeandroid.com/thread-206358-1-1.html


4 Runtime 可执行程序

编译成可执行程序,当然在实际使用中需要一些控制参数。

代码里如何执行这些可执行程序:

         在底层可以通过system();

         在Java层Runtime.getRuntime().exec();

例如:

         String BIN_PATH = "/system/bin/catch_log";

         Runtime.getRuntime().exec(BIN_PATH + " -x 1");


         Runtime.getRuntime().exec("/system/bin/cat  "+path);

         Runtime.getRuntime().exec("su -c chmod 777 /data/glad.txt");

         Runtime.getRuntime().exec("/system/bin/sh /data/test.sh");


Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能

比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用

或者写个脚本,apk中直接调用,省去中间层或者JNI;

   参考文档:http://blog.csdn.net/zmyde2010/article/details/6123987


5 diag_mdlog

         这是高通提供的抓取qxdm log的东东。

         既包括AP端得,也包括BP端的;或者跟选择端口有关系,8064ap和modem端口独立;


         代码位置:\vendor\qcom\proprietary\diag\mdlog\


         使用diag_mdlog这个可执行程序来抓取log

                   需要Diag.cfg文件来配置过滤项,选择需要的Log信息。在使用前必须放置一个Diag.cfg文件。

                   Diag.cfg文件可以用QXDM生成;可以通过F12,Filtered View /Config 来生成Diag.cfg


         这个程序一次只能执行一个,可以用kill -9 PID 将其强制结束


6 抓取Ap 端 memory dump

         高通qpst工具Memory Dump App

         要在downloader模式

         需要修改的nv项:

                   905 0

                   4399 1

         或者使用emmc进入downloader模式。


         打开连接手机, Get Regions,选择需要保存的Regin,SaveTo选择一个文件夹,确定即可

         注意:这个路径下不能有中文,必须是英文的路径

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容