[英]how to get stack trace c++ functions names in android
我正在尋找我的應用程序中的本機崩潰,但是我找不到一個工具可以幫助我將地址轉換為庫中的函數名,我看到了這篇文章: 如何使用addr2line,但似乎只有在有跟蹤時才能工作像這樣 :
I/DEBUG ( 31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 31): Build fingerprint: 'generic/sdk/generic:2.3/GRH55/79397:eng/test-keys'
I/DEBUG ( 31): pid: 378, tid: 386 >>> com.example.gltest <<<
I/DEBUG ( 31): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
I/DEBUG ( 31): r0 001dbdc0 r1 00000001 r2 00000000 r3 00000000
I/DEBUG ( 31): r4 00000000 r5 40a40000 r6 4051a480 r7 42ddbee8
I/DEBUG ( 31): r8 43661b24 r9 42ddbed0 10 42ddbebc fp 41e462d8
I/DEBUG ( 31): ip 00000001 sp 436619d0 lr 83a12f5d pc 8383deb4 cpsr 20000010
I/DEBUG ( 31): #00 pc 0003deb4 /data/data/com.example.gltest/lib/libnativemaprender.so
I/DEBUG ( 31): #01 pc 00039b76 /data/data/com.example.gltest/lib/libnativemaprender.so
I/DEBUG ( 31): #02 pc 00017d34 /system/lib/libdvm.so
正如您在最后三行中看到的那樣,您的應用程序的庫在那里: ibnativemaprender.so
並且只有當您的媒體庫出現在其中時,addr2line應用程序才能運行
但在我的追蹤中,我有這個:
I/DEBUG (16251): #00 pc 000161c0 /system/lib/libc.so
I/DEBUG (16251): #01 lr afd196f1 /system/lib/libc.so
我的圖書館直到那里才顯示:
/DEBUG (16251): stack:
I/DEBUG (16251): 46f0c818 afd426a4
I/DEBUG (16251): 46f0c81c 000b7290
I/DEBUG (16251): 46f0c820 00000afa
I/DEBUG (16251): 46f0c824 afd187b9 /system/lib/libc.so
I/DEBUG (16251): 46f0c828 afd42644
I/DEBUG (16251): 46f0c82c afd467c4
I/DEBUG (16251): 46f0c830 00000000
I/DEBUG (16251): 46f0c834 afd196f1 /system/lib/libc.so
I/DEBUG (16251): 46f0c838 00000001
I/DEBUG (16251): 46f0c83c 46f0c86c
I/DEBUG (16251): 46f0c840 81b6a4a0 /data/data/com.android.ANMP/lib/mylib.so
有沒有可以幫助我的工具? 或使用addr2line的另一種方式?
不,不是。 為此,您需要手動執行搜索。
手動有三個選項:
添加調試打印以找出發生的時間和地點
使用IDA pro(這是非常昂貴的工具),將您的庫加載到其中並查找地址81b6a4a0
,嘗試找出它的功能。 如果使用調試符號進行編譯,它應該很容易。
找到您的庫的基地址,使用objdump(來自NDK工具鏈)查找地址81b6a4a0
(從基地址中刪除后)。
在后兩種方法中,如果找不到任何有用的方法,請使用adb從設備中拉出libc.so和libdvm.so並嘗試查找出現在堆棧跟蹤中的函數,然后檢查在哪里調用這些函數在您的代碼中。
看看這個 。 我還沒有時間嘗試,所以請告訴是否為您工作
您可以使用GDB獲取堆棧跟蹤。 如果您的手機已扎根或使用仿真器,則可以啟用核心轉儲。 然后,您可以使用GDB檢查核心轉儲。
有關在Eclipse中設置GDB的信息,請參見以下問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.