㈠ android系统的系统日志有哪几个文件,这些文件中包含什么内容
手机的android log(main_log、events_log、kernel_log),mainlog记录手机android上层app以及framework相关活动的log,比如app打印的log。
eventslog主要是ActivityManager、powerManager等相关的log;Kernellog则主要是驱动相关的log。
Modem log,主要是通话相关的,比如信号强弱、连接网络等。netlog,查看网络链接情况,抓取网络包等。其它有data/anr 目录下的traces/tombstones等,分析死机、重启。
mainlog,查看应用申请什么权限,一般不会开放。
(1)androidlogapk扩展阅读:
系统日志的价值
系统日志策略可以在故障刚刚发生时就向你发送警告信息,系统日志帮助你在最短的时间内发现问题。
系统日志是一种非常关键的组件,因为系统日志可以让你充分了解自己的环境。这种系统日志信息对于决定故障的根本原因或者缩小系统攻击范围来说是非常关键的,因为系统日志可以让你了解故障或者袭击发生之前的所有事件。
为虚拟化环境制定一套良好的系统日志策略也是至关重要的,因为系统日志需要和许多不同的外部组件进行关联。良好的系统日志可以防止你从错误的角度分析问题,避免浪费宝贵的排错时间。
另外一种原因是借助于系统日志,管理员很有可能会发现一些之前从未意识到的问题,在几乎所有刚刚部署系统日志的环境当中。
使用系统日志产品当中包含的其他特性,包括向监控团队自动发送报警通知等功能。系统日志基于警报类型或者准确的警报消息,系统日志可以通过触发特定操作来完成。
系统日志通过简单地设定这些警报,你将会在自己的环境中处于更加主动的位置,因为你可以在事故变得更加严重之前得到通知。
㈡ 安卓手机里的文件夹哪些可以删除
删除系统中无用的安卓应用程序和文件的方式:
1、首先将安卓手机ROOT。
推荐一键root或者卓大师、刷精精灵均可。安装后手机连接电脑,打开软件,软件会自动检测 ,点击确定后等待完成。完成后会自动在手机安装一个授权管理 的软件。
2.在手机上安装文件管理器。推荐ES文件浏览器(也可360文件管理器)。安装后,打开软件进入设置,找到Root设置进入,将前2个选项打开(如图)。360授权管理会提示你是否允许获得最高权限 ,允许 就行了。
3.设置后,进入/system/app文件夹,然后按照下述列表,谨慎删除无用的“系统程序” 。(不建议直接删除,可将想删除的程序移动到SD卡,一旦出现问题,可以再移动回来,移动回来后要更改读写权限。更改:长按移回的某个软件,弹出设置选项,依次进入属性—更改权限(如下图)——然后勾选读取、写入
4.删除无用的文件
1.datadalvik-cache文件夹里的文件作用:当Android启动时,DalvikVM监视所有的程序(APK文件)和框架,并且为他们创建一个依存关系树。DalvikVM通过这个依存关系树来为每个程序优化代码并存储在Dalvik缓存中。这样,所有程序在运行时都会使用优化过的代码。这就是当你刷一个新的ROM时,有时候第一次启动时间非常非常长的原因。当一个程序(或者框架库)发生变更,DalvikVM将会重新优化代码并且再次将其存在缓存中。多次安装卸载程序后,会生成很多无的文件,所以可以全部删除,删除后重新开机,系统会自动更新程序缓存,但删除程序的缓存都没有了,内存空间有一定的增多,没删除的软件会再次生成这些文件。所以再次开机时,会比平常开机慢。
2.后缀为cache的文件可以清空,为临时文件存储。
3.以. 点开头的文件都可以清空, 因为这也是临时文件
4.后缀为 .log的文件可以删除,这是程序的日志文件
㈢ android手机日志怎么查看
以小米手机为例,其他机型操作方法大致相同:
1.首先在手机桌面上找到【文件管理】,进入手机的文件管理页面。
㈣ 为什么eclipse 生成android apk文件安装后打开闪退 以下是logcat报错,小白求救
2.
apk如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉,这个很有用哦。
目前google在android系统方面的态度和策略也都是非盈利性质的,和symbian的签名有本质的区别,而我们使用eclipse+adt插件从开发环境安装到手机中的apk文件已经包含了adt插件的debug签名文件,所以没有安装,但是最终发行的版本需要自己的key去签名
㈤ 如何读懂和分析Android的logcat以及stack traces
一般在平时工作中,基本上很多代码可以在eclipse+ndk进行调试,但如果需要用到具体的硬件设备,如媒体播放设备无法模拟的情况下,只能上硬件(盒子或手机)上进行调试。此时唯一的调试手段就是logcat产生log信息进行分析问题了。
什么时候会有Log文件的产生 ?一般在如下几种情况会产生log文件 。
1、程序异常退出 uncaused exception
2、程序强制关闭 Force Closed (简称FC)
3、程序无响应 Application No Response(简称ANR),一般主线程超过5秒么有处理就会ANR
4、手动生成
进入控制台输入:logcat命令即可进行输出
第一部分
1、分析工具介绍
a、cat /proc/meminfo 显示基本的内存信息
------ MEMORY INFO (/proc/meminfo) ------
MemTotal: 285184 kB
MemFree: 106360 kB
Buffers: 0 kB
Cached: 60036 kB
SwapCached: 0 kB
Active: 98160 kB
Inactive: 49100 kB
Active(anon): 87260 kB
Inactive(anon): 288 kB
Active(file): 10900 kB
Inactive(file): 48812 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 87240 kB
Mapped: 26500 kB
Shmem: 324 kB
Slab: 13340 kB
SReclaimable: 1672 kB
SUnreclaim: 11668 kB
KernelStack: 2160 kB
PageTables: 5600 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 142592 kB
Committed_AS: 1065600 kB
VmallocTotal: 417792 kB
VmallocUsed: 137700 kB
VmallocChunk: 254980 kB
重点关注这下面几个值:
MemTotal: 285184 kB //总计物理内存的大小
MemFree: 106360 kB //可用内存有多少
Buffers: 0 kB //磁盘缓存内存的大小
Cached: 60036 kB
# free
free
total used free shared buffers
Mem: 285184 178884 106300 0 0
Swap: 0 0 0
Total: 285184 178884 106300
在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。
但实际上这些内存也是可以立刻拿来使用的。
所以空闲内存=free+buffers+cached=total-used
还有几个命令可使用:
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
b、查看进程信息
------ CPU INFO (top -n 1 -d 1 -m 30 -t) ------
能够实时显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器
c、android提供的一些操作工具
------ PROCRANK (procrank) ------
------ PROCMEM (procmem) ------
------ SHOWMAP (showmap) ------
... 就不一一列举了,有兴趣的朋友可以去看看
这此工具的代码位于android的 /system/extras
d、虚拟内存的查看工具
------ VIRTUAL MEMORY STATS (/proc/vmstat) ------
------ VMALLOC INFO (/proc/vmallocinfo) ------
2、时间信息,也是我们主要分析的信息
格式如下:
------ SYSTEM LOG (logcat -b system -v time -d *:v) ------
$:logcat -b system -v time -d *:v
01-02 08:00:02.570 I/SystemServer( 957): Notification Manager
01-02 08:00:02.570 I/SystemServer( 957): Device Storage Monitor
01-02 08:00:02.580 I/SystemServer( 957): Location Manager
01-02 08:00:02.580 I/SystemServer( 957): Search Service
01-02 08:00:02.590 I/SystemServer( 957): DropBox Service
01-02 08:00:02.590 I/SystemServer( 957): Wallpaper Service
3、虚拟机信息,包括进程的,线程的跟踪信息,这是用来跟踪进程和线程具体点的好地方 。
------ VM TRACES JUST NOW (/data/anr/traces.txt.bugreport: 2011-01-15 16:49:02) ------
------ VM TRACES AT LAST ANR (/data/anr/traces.txt: 2011-01-15 16:49:02) ------
格式如下 :
----- pid 1516 at 1970-01-02 08:03:07 -----
Cmd line: com.ipanel.join.appstore
DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x4001f188 self=0xd028
| sysTid=1516 nice=0 sched=3/0 cgrp=[fopen-error:2] handle=-1345017744
第二部分
如何分析log信息
1、查找错误信息的关键字眼
"error" "failxx" "E/" 等的错误信息
将这些问题先行解决掉
2、动态库死机
查看类似的“Build fingerprint:”这些关键字
I/DEBUG ( 692): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 692): Build fingerprint: 'generic/generic/generic:2.3.1/GRH78/eng.userdev-rd6-input.20120221.113348:eng/test-keys'
I/DEBUG ( 692): pid: 694, tid: 694 >>> /system/bin/mediaserver <<<
I/DEBUG ( 692): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000input mole init -->
010
对于这此信息,可以查看动态库的分析:
http://blog.csdn.net/andyhuabing/article/details/7074979
3、解决java抛异常的问题解决
E/UsbObserver( 957): java.lang.NullPointerException
E/UsbObserver( 957): at com.android.server.UsbObserver.init(UsbObserver.java:131)
E/UsbObserver( 957): at com.android.server.UsbObserver.<init>(UsbObserver.java:65)
E/UsbObserver( 957): at com.android.server.ServerThread.run(SystemServer.java:419)
I/SystemServer( 957): UI Mode Manager Service
这个直接找到java代码,分析其实现即可解决
4、ANR问题
搜索“ANR”关键词,快速定位到关键事件信息 。
定位到关键的事件信息如下:
I/dalvikvm( 1014): Wrote stack traces to '/data/anr/traces.txt'
I/Process ( 957): Sending signal. PID: 1124 SIG: 9
指定哪个java包出问题
E/ActivityManager( 957): ANR in com.ipanel.join.appstore
进程号为957发生了如下错误:com.ipanel.join.appstore 包下面 Broadcast问题
ANR原因:
E/ActivityManager( 957): Reason: Broadcast of Intent { act=android.appwidget.action.APPWIDGET_UPDATE cmp=com.ipanel.join.appstore/.widget.SmallWidget1 (has extras) }
这是ANR的堆栈调用文件
I/dalvikvm( 1014): Wrote stack traces to '/data/anr/traces.txt'
通过上面的log信息分析,应该是接收一个广播消息时超时了
我们再分析虚拟机信息 ,打开/data/anr/traces.txt,可有通过adb pull /data/anr/traces.txt .
这里每一段都是一个线程 ,当然我们还是看线程号为1的主线程了。通过分析发现关键问题是这样:
搜索“DALVIK THREADS”关键词,快速定位到本应用程序的虚拟机信息日志
----- pid 1516 at 1970-01-02 08:03:07 -----
Cmd line: com.ipanel.join.appstore
DALVIK THREADS:
。。。
at com.ipanel.join.appstore.widget.AbsSmallWidget.getRemoteViews(AbsSmallWidget.java:56)
其实从这句话:
at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method)
基本上确认是 socket ->connect 连接超时了,导致主线程5s内没有响应从而产生ANR错误。默认的connect连接timeout时间是75s
其实解决办法就是利用非阻塞方式进行连接即可。
从CPU占用率上也可以看出是在kernel中执行堵塞住了
E/ActivityManager( 957): 75% TOTAL: 4.7% user + 70% kernel
5、执行DexOpt错误
W/dalvikvm( 1803): DexOpt: --- END 'SettingsProvider.apk' --- status=0x000a, process failed
E/dalvikvm( 1803): Unable to extract+optimize DEX from '/system/app/SettingsProvider.apk'
。。。。android.app.ActivityThread.installProvider(ActivityThread.java:3557)
E/SystemServer( 1803): at android.app.ActivityThread.getProvider(ActivityThread.java:3356)
从上面的打印看,是在解压或优化extract+optimize DEX的apk文件时出错了
1、没有出现magic number错误,这个原因与原子操作无关(这是一快速的加锁和解锁的轻量级操作函数)
2、执行dexopt出错
查明是服务器硬盘没空间了,导致引导文件系统的时候没有空间进行解压而失败
6、系统启动后默认其妙或随机死机情况
出现这种错误:
12-01 08:11:56.027: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.
12-01 08:11:57.315: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.
12-01 08:11:59.318: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.
12-01 08:12:03.332: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.
12-01 08:12:05.329: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.
12-01 08:12:07.216: WARN/KeyCharacterMap(312): No keyboard for id 0
12-01 08:12:07.216: WARN/KeyCharacterMap(312): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
㈥ Android log 出现了多次两个--------- beginning of kernel是不是可以判断kernel重启过了
device eth0 entered promiscuous mode
Apr 11 16:30:21 localhost kernel: device eth0 left promiscuous mode
Apr 11 16:30:39 localhost kernel: device eth0 entered promiscuous mode
Apr 11 16:30:39 localhost kernel: device eth0 left promiscuous mode
Apr 12 15:11:46 localhost kernel: device eth0 entered promiscuous mode
Apr 12 15:11:46 localhost kernel: device eth0 left promiscuous mode
Apr 13 11:30:58 localhost kernel: device eth0 entered promiscuous mode
Apr 13 11:30:58 localhost kernel: device eth0 left promiscuous mode
log文件实打印状态信息两种
实打印主要:logcat mainlogcat radiologcat eventstcpmp QXDM Log
状态信息:adb shell dmesgadb shell mpstateadb shell mpsysadb bugreport
实log:
adb logcat -b events -v time 打印系统事件志比触屏事件
tcpmp 用于TCP/IP协议相关都使用抓
adb shell tcpmp -s 10000 -w /sdcard/capture.pcap
比抓mms载候UA profilebrowser网候使用proxyAPN载streaming相关内容包括UA profile等
状态log:
其实够bugreport(命令adb bugreport>bugreport.log)
面包含dmesgmpstatempsys;
dmesg(命令adb shell dmesg > ldmesg_kernel.log)kernellog凡跟kernel相关比driver问题(相机蓝牙usb启等等)
mpstate系统状态信息面比较全包括手机前内存信息、cpu信息、logcat缓存kernel缓存等等;
mpsys关于系统所进程Process内容都面adb shell mpsys 命令更详尽用
比adb shell mpsys meminfo system查看systemprocess内存信息
mpsys [options]
meminfo 显示内存信息
cpuinfo 显示CPU信息
account 显示accounts信息
activity 显示所activities信息
window 显示键盘窗口关系
wifi 显示wifi信息
通adb logcat/bugreport实查看系统log及系统状态信息;
何Log存储保存系统运行情况呢
通些脚本或者执行执行程序保存log信息便析问题;
2 抓取实log
? int main(int argc, char *argv[]) { …… //抓取main log char path[] = "/xxx/xxx/app_main.log"; sprintf(cmd,"logcat -v time > %s",path); fd = open(path, O_WRONLY|O_TRUNC|O_CREAT, 0777); <STRONG>system</STRONG>(cmd); //radio log …… sprintf(cmd,"logcat -b radio -v time > %s",path); <STRONG>system</STRONG>(cmd); //kernel …… sprintf(cmd,"cat /proc/kmsg > %s",path); <STRONG>system</STRONG>(cmd); //bluetoolth log sprintf(cmd,"hcimp -w %s","/data/bt.log"); <STRONG>system</STRONG>(cmd); …… }3 抓取状态log
? int main(int argc, char *argv[]) { //panic log 需要判断/proc/apanic_console否存 sprintf(cmd,"cp -R %s %s",from_dir,to_dir); <STRONG>system</STRONG>(cmd); //anr log /data/anr/ sprintf(cmd,"cp -R %s %s",from_dir,to_dir); <STRONG>system</STRONG>(cmd); //tombstones log /data/tombstones/ <STRONG>modem重启复位等</STRONG> sprintf(cmd,"cp -R %s %s",from_dir,to_dir); <STRONG>system</STRONG>(cmd); //mdm log /data/tombstones/mdm/<STRONG>modem重启复位</STRONG> sprintf(cmd,"cp -R %s %s",from_dir,to_dir); <STRONG>system</STRONG>(cmd); …… }
panic log:
表示Linux kernel走知道该走步状况tombstone log:
系统发tombstone候kernel首先报严重警告信号(signal),层接收
进程调试工具进程调用栈现场保存起并系统创建data/tombstones目录异进程信息写目录面
发者需要通调用栈析整调用流程找问题点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;
参考文档:
5 diag_mdlog
高通提供抓取qxdm log东东
既包括AP端包括BP端;或者跟选择端口关系,8064apmodem端口独立;
代码位置:\vendor\qcom\proprietary\diag\mdlog\
使用diag_mdlog执行程序抓取log
需要Diag.cfg文件配置滤项选择需要Log信息使用前必须放置Diag.cfg文件
Diag.cfg文件用QXDM;通F12Filtered View /Config Diag.cfg
程序能执行用kill -9 PID 其强制结束
6 抓取Ap 端 memory mp
高通qpst工具Memory Dump App
要downloader模式
需要修改nv项:
905 0
4399 1
或者使用emmc进入downloader模式
打连接手机 Get Regions选择需要保存ReginSaveTo选择文件夹确定即
注意:路径能文必须英文路径