1. 程式人生 > >android 除錯中 addr2line 命令的使用

android 除錯中 addr2line 命令的使用

http://blog.csdn.net/coder_jack/archive/2010/06/28/5700348.aspx 關於除錯:除錯中addr2line命令的使用。 問題引出:i850的wifi定位開啟後,在使用goole maps時出現rootfs重啟現象,列印的log資訊如下: ////////////////////////// I/DEBUG ( 3411): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** I/DEBUG ( 3411): Build fingerprint: 'PROWAVE/i850/i850/:Eclair/ECLAIR/eng.zhangjiejing.20100430.113200:eng/test-keys' I/DEBUG ( 3411): pid: 3436, tid: 3475 >>> system_server <<< I/DEBUG ( 3411): signal 11 (SIGSEGV), fault addr 00000000 I/DEBUG ( 3411): r0 26ba7eec r1 403f3c49 r2 e98cf6f4 r3 405e58ae I/DEBUG ( 3411): r4 00000000 r5 00000000 r6 4229b6cc r7 48fecec8 I/DEBUG ( 3411): r8 490ecd84 r9 48feceb4 10 48fece9c fp 00314d30 I/DEBUG ( 3411): ip ad3527cd sp 490ecd68 lr ad3527eb pc 00000000 cpsr 00000010 I//system/bin/dhcpcd( 3673): wlan0: looping I//system/bin/dhcpcd( 3673): wlan0: signal_fd: 4,fd:5 I/ActivityManager( 3436): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher/.Launcher } D/LocationManager( 3777): removeUpdates: listener =

[email protected] I/DEBUG ( 3411): #00 pc 00000000 I/DEBUG ( 3411): #01 pc 000527e8 /system/lib/libandroid_runtime.so I/DEBUG ( 3411): #02 pc 0000f1f4 /system/lib/libdvm.so I/DEBUG ( 3411): I/DEBUG ( 3411): code around lr: I/DEBUG ( 3411): ad3527d8 69e19806 694c9000 1c191c10 9b059a04 I/DEBUG ( 3411): ad3527e8 b00247a0 46c0bd10 00017868 00006728 I/DEBUG ( 3411): ad3527f8 4c0fb570 447c4d0f 6b2e1965 d1112e00 I/DEBUG ( 3411): I/DEBUG ( 3411): stack: I/DEBUG ( 3411): 490ecd28 00000013 I/DEBUG ( 3411): 490ecd2c ad05f661 /system/lib/libdvm.so I/DEBUG ( 3411): 490ecd30 410c2aec /dalvik-LinearAlloc (deleted) I/DEBUG ( 3411): 490ecd34 ad0560f7 /system/lib/libdvm.so I/DEBUG ( 3411): 490ecd38 400292d8 /mspace/dalvik-heap/zygote/0 (deleted) I/DEBUG ( 3411): 490ecd3c 410c2aec /dalvik-LinearAlloc (deleted) I/DEBUG ( 3411): 490ecd40 000003dc I/DEBUG ( 3411): 490ecd44 ad0591f5 /system/lib/libdvm.so I/DEBUG ( 3411): 490ecd48 42200d44 /data/dalvik-cache/
[email protected]
@classes.dex I/DEBUG ( 3411): 490ecd4c 42200d44 /data/dalvik-cache/[email protected]@classes.dex I/DEBUG ( 3411): 490ecd50 4232b87d /data/dalvik-cache/[email protected]@classes.dex I/DEBUG ( 3411): 490ecd54 00000000 I/DEBUG ( 3411): 490ecd58 4264aa04 /data/dalvik-cache/
[email protected]
@classes.dex I/DEBUG ( 3411): 490ecd5c 410c1cbc /dalvik-LinearAlloc (deleted) I/DEBUG ( 3411): 490ecd60 df002777 I/DEBUG ( 3411): 490ecd64 e3a070ad I/DEBUG ( 3411): #01 490ecd68 43160000 I/DEBUG ( 3411): 490ecd6c ad05f661 /system/lib/libdvm.so I/DEBUG ( 3411): 490ecd70 490ecda8 I/DEBUG ( 3411): 490ecd74 ad00f1f8 /system/lib/libdvm.so W/ActivityManager( 3436): Activity pause timeout for HistoryRecord{43d6cd48 com.google.android.apps.maps/com.google.android.maps.MapsActivity} wait for fb sleep Enter D/WifiService( 3436): releaseWifiLockLocked: WifiLock{NetworkLocationProvider type=2 [email protected]} binder: release 3436:3560 transaction 22233 in, still active binder: send failed reply for transaction 22233 to 3777:3777 I/DEBUG ( 3411): debuggerd committing suicide to free the zombie! I/DEBUG ( 3855): debuggerd: Apr 14 2010 14:24:22 I/ServiceManager( 2066): service 'usagestats' died I/ServiceManager( 2066): service 'account' died ////////////////////////// 注意到紅色部分,這就是程式執行時的棧!顯然第一個pc指標的值為0,也就是pc指標為空,這就是問題之所在,接下來就是要定位這個問題,上邊說了,這裡是程式執行時的棧,那麼#01 pc 000527e8 /system/lib/libandroid_runtime.so 這個地址就是我們要找的問題的範圍,因為顯然是後者先入棧的,所以顯然前者包含於後者,那麼通過如下命令用地址定位一下原始碼的位置: [email protected]:~/r7_0422$ ../gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-addr2line -e out/target/product/i850/symbols /system/lib/libandroid_runtime.so 000527e8 frameworks/base/core/jni/android_location_GpsLocationProvider.cpp:397 [email protected]:~/r7_0422$ 看到原始碼的397行是一個函式,那麼000527e8就是這個函式的入口地址了。繼而,pc 000000 對應的呼叫就應該在該函式內部,看到該函式內部只是做了對另一個函式指標的呼叫而已,所以我們可以斷定這個函式指標的值為空,顯然呼叫一個空的指標函式是錯誤的。所以需要給這個函式指標在早些時候賦值一下問題就可以解決了! 關於addr2line的一點補充:如果可執行檔案中沒有包括除錯符號,您將獲得??:0 作為響應。 還有在linux中的readelf命令可以讀取可執行檔案的相關資訊,比如有一個可執行檔案 aa.elf 則可以這麼使用: readelf -h aa.elf 引數-h讀取可執行檔案的head資訊。

相關推薦

android 除錯 addr2line 命令的使用

http://blog.csdn.net/coder_jack/archive/2010/06/28/5700348.aspx 關於除錯:除錯中addr2line命令的使用。 問題引出:i850的wifi定位開啟後,在使用goole maps時出現rootfs重啟現象,列印的

Android 除錯 addr2line 工具的使用

我們在解bug的時候經常能碰到一些段錯誤。下面是我從一個bug的log中擷取的一個段錯誤: ///////////////////////////////////////////////////////////////////////////////////////////

AndroidAndroid程式碼執行命令

Android 在Android程式碼中執行命令列 轉自 https://www.cnblogs.com/lipeineng/p/6078859.html 1.路徑最好不要是自己拼寫的路徑/mnt/shell/emulated/0/wifidog.conf 最好是通過方法獲取的路徑,不然

Android除錯遇到的bug

09-11 14:39:52.120: ERROR/AndroidRuntime(12051): FATAL EXCEPTION: Thread-431 09-11 14:39:52.120: ERROR/AndroidRuntime(12051): Process: co

androidping命令的實現

ack ces buffered amr 實現 int time() ade article /** * 推斷Ping 網址是否返回成功 * * @param netAddress * @return */ public static String isPingSuc

Android開發遇到的adb命令總結

1、獲取螢幕解析度:    adb shell dumpsys window displays 2、修改裝置dpi :    adb shell              wm density  240  (以240dpi為例)       

Android Studio除錯Android原始碼

如果Android程式設計師想往更高一級發展,對Android系統的瞭解深入程度決定了你以後的終點。所以對於系統原始碼的瞭解可謂事半功倍。如果我們死扛原始碼,會浪費很多時間在判斷程式碼走哪個分支上面,對於一些多層巢狀的程式碼,基本上到後面就忘記前面到底走哪個分支了。如果能夠實時看到程式的

PyCharm小技巧:斷點除錯時在控制檯執行命令

現在有一段測試程式碼,我想在執行時暫停,觀察此時的資料: import pylab as plt import numpy as np img=plt.imread('test.jpg') mean_px=np.mean(img, axis=(0, 1)) aft=(img-mea

Android Studio javah不是內部或外部命令問題

在我的電腦系統環境變數配置後,命令提示符中可以執行javah命令,但是Android Studio 仍然找不到javah命令,解決方法如下:找到安裝路徑D:\Android Studio\jre\bin,具體情況換成相應的安裝路徑,然後開啟Android Studio的終端命

android逆向和除錯記憶體斷點的設定

使用IDA對android程序逆向除錯時有一個問題是無法設定記憶體斷點,導致很多時候分析會卡殼,這一點可以通過gikdbg中的gdb來彌補,gdb中watchpoint是用來觀察某個地址的狀態,因此可以作為記憶體斷點使用,命令如下: (gdb) watch   在指定變數

Android Studio需要掌握的Debug除錯技巧

一.基本使用 Android Debug 有兩種途徑: 第一種方式:直接點選下圖執行按鈕右側的圖示,進入Debug模式。 第二種方式:如果app處於執行狀態,點選下面的圖示也可以進入Debug模式。 點選後會彈出對話方塊: 點選OK進入De

Android系統通過shell命令實現wifi的連線控制

簡介 工作中遇到一個“變態”的需求,在android系統中不通過java層控制wifi的連線(主要是修改ap的essid和password),而是需要通過native層實現對wifi的控制。 How 接到這個需求時,第一個想法是如何找到Android

在Mac pro上如何將Android SDK的adb命令新增到環境變數,這裡將進行說明!

此時文字編輯器會開啟一個文字,編輯內容如下: export PATH=${PATH}:/Users/apple/Library/Android/sdk/platform-tools export PATH=${PATH}:/Users/apple/Library/Android/sdk/tools

gdb除錯core dump入門實踐(順便複習一下之前介紹過的addr2line命令除錯

        除錯技能是軟體開發的必備技能, 不會除錯, 就抓不到bug, 就很痛苦。 本文我們來一起聊聊gdb除錯core          Part 1:         在前面的博文中, 我們聊過重要的addr2line除錯, 現在再來一起看看, 就當是複習吧。

Android APK呼叫底層linux命令或者指令碼

由於工作需要,接觸到百度語音識別SDK移植,由於需要實現在APK裡面控制物理硬體的效果,第一次接觸到Runtime.getRuntime().exec方法。 通過網上查閱資料,得知Runtime.getRuntime().exec的使用方法,程式碼如下:

Androidtop命令欄位含義

   68      0         0%      D               1           0K           0K         fg              root       COMIP Battery s   399    0         0%      S   

android除錯用到的各種命令

Makfile編譯引數   -i   忽略命令執行返回的出錯資訊。   -s   沉默模式,在執行之前不輸出相應的命令列資訊。   -r   禁止使用build-in規則。   -n   非執行模式,輸出所有執行命令,但並不執行。   -t   更新目標檔案。

android除錯log輸出及類似C/C++的__FILE__、__FUNC__、__LINE__等功能

下面的log記錄方式是隻是自己使用覺得方便的一種形式。 android程式出現問題一般有兩種情況 1、直接崩潰。這個比較好找問題。可以直接通過log的error裡面去定位到出錯的地方。 2、執行結果效果沒有符合預期。這個就需要在程式中增加log進行定位。 android.u

[Android除錯基礎五]adb命令—檔案複製與許可權修改

Debug中需要替換一些system下的檔案,通常system為read only,因此需要先修改操作許可權為可讀寫,進入root後,su獲得許可權,在敲入命令:mount -o remount,rw / (mount -ro remount,rw /system),將目錄

Android逆向的常用除錯方法和使用程式碼總結

0x01 smail語言的調式方法 a.動態分析法,利用log日誌輸入或者toast輸出。 利用Toast進行除錯 java程式碼 Toast.makeText(this, "Toast text", 1).show(); smail程式碼 const-string