㈠ 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選擇文件夾確定即
注意:路徑能文必須英文路徑