很多时候,android程序难免会有很多运行时错误扑捉不到或者扑捉不充分,导致程序出错的时候记录不下错误。
如下图所示
此时最简单的就是,连接USB线,运行 adb logcat -b main -v time > logcat.log将缓冲区内的纪录导出。
这里详细解释一下这行命令的意思:
Logcat命令列表
Option Description
-b <buffer> 加载一个可使用的日志缓冲区供查看,比如event 和radio . 默认值是main 。具体查看Viewing Alternative Log Buffers.
-c 清楚屏幕上的日志.
-d 输出日志到屏幕上.
-f <filename> 指定输出日志信息的<filename> ,默认是stdout .
-g 输出指定的日志缓冲区,输出后退出.
-n <count> 设置日志的最大数目<count> .,默认值是4,需要和 -r 选项一起使用。
-r <kbytes> 每<kbytes> 时输出日志,默认值为16,需要和-f 选项一起使用.
-s 设置默认的过滤级别为silent.
-v <format> 设置日志输入格式,默认的是brief 格式,要知道更多的支持的格式,参看Controlling Log Output Format .
-b main 是指定读取main缓冲区中的信息:
main指的就是 /dev/log/main这个循环buffer
ls发现/dev/log/还有这几个循环buffer,一般读取main就够了
system
radio
events
main
我们来看一下手机中的循环buffer的大小信息:(也就是说,理论上该手机最大有16KB的缓冲信息可以获取)
logcat -g
/dev/log/main: ring buffer is 128Kb (127Kb consumed), max entry is 4096b, max pa
yload is 4076b
/dev/log/system: ring buffer is 128Kb (127Kb consumed), max entry is 4096b, max
payload is 4076b
以上的方法就是讲解的手动方式获取运行时堆栈信息:
如果不想这么麻烦,其实也简单直接写一个小程序,当需要获取logcat堆栈信息的时候一个按钮触发如下代码就可以了
publicstaticStringLOG_FILE_NAME =
Environment.getExternalStorageDirectory() +"/jhyLogcat";
process =Runtime.getRuntime().exec(
"logcat -b main -v time -f " +LOG_FILE_NAME +requestTime
+ ".log");
参考:http://blog.youkuaiyun.com/czbever/article/details/5910640