介紹gdb調(diào)試工具

本文介紹Native異常的調(diào)試工具gdb的環(huán)境準(zhǔn)備與常見(jiàn)命令

1. 找到gdbserver

當(dāng)有Android系統(tǒng)源碼蝶念,可在/prebuilts目錄下查找,一般位于如下:

工具 所在源碼路徑
32位gdb服務(wù)端 prebuilts/misc/android-arm/gdbserver/gdbserver
64位gdb服務(wù)端 prebuilts/misc/android-arm64/gdbserver64/gdbserver64
32位gdb客戶端 prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-gdb
64位gdb客戶端 prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-gdb
symbols /out/target/product/[name]/symbols

gdbserver64和gdbserver選擇哪一個(gè)芋绸,取決于當(dāng)前手機(jī)是32位還是64位媒殉,要判定這個(gè)方法很有很多,比如

adb shell getprop ro.product.cpu.abi

2. 環(huán)境準(zhǔn)備

adb root
adb disable-verity          
adb reboot

adb root
adb remout
adb push prebuilts/misc/android-arm64/gdbserver64/gdbserver64 /system/bin

adb shell setenforce 0

這里有幾點(diǎn)需要注意:

  • 如果disable-verity命令不可執(zhí)行摔敛,需要選擇源碼環(huán)境下的adb命令
  • 如果過(guò)程遇到selinux權(quán)限問(wèn)題廷蓉,記得關(guān)閉

3. 啟動(dòng)gdbserver服務(wù)

服務(wù)端操作:(手機(jī))

adb shell
gdbserver64 :1234 --attach 1536  //1536代表system_server進(jìn)程的pid

客戶端操作:(PC電腦)

adb forward tcp:1234 tcp:1234
//進(jìn)入gdb狀態(tài)
aarch64-linux-android-gdb  

//提前配置好環(huán)境變量
target remote:1234
// 加載被調(diào)試的可執(zhí)行程序
file xxx/out/target/product/[name]/symbols/system/bin/app_process64  
// 設(shè)置符號(hào)路徑
set sysroot  [xxx/symbols]
//設(shè)置源碼路徑
set dir xxx   

開(kāi)始調(diào)試:

b frameworks/base/core/jni/android_util_Process.cpp:1035 if sig == 19
c

4. 常見(jiàn)gdb調(diào)試命令

命令名 命令縮寫(xiě) 命令說(shuō)明
backtrace bt 查看函數(shù)調(diào)用堆棧
frame f 查看棧幀
list l 查看源碼
print p 打印內(nèi)部變量值
info i 查看程序狀態(tài)
display disp 跟蹤某變量,每次停下來(lái)則顯示值
run r 開(kāi)始運(yùn)行程序
continue c 繼續(xù)程序運(yùn)行,直到下一個(gè)斷點(diǎn)
break b 設(shè)置斷點(diǎn)
start s 開(kāi)始執(zhí)行程序
step s 執(zhí)行下一條語(yǔ)句马昙,若該語(yǔ)句為函數(shù)調(diào)用,則進(jìn)入函數(shù)內(nèi)的第一條語(yǔ)句
next n 執(zhí)行下一條語(yǔ)句桃犬,不會(huì)進(jìn)入函數(shù)內(nèi)部執(zhí)行
watch 監(jiān)視變量值的變化
file 裝入需要調(diào)試的程序
set var name=v 設(shè)置變量的值
kill k 殺掉正在調(diào)試的程序
quit q 退出GDB環(huán)境

以下列舉部分常見(jiàn)的調(diào)試命令:

命令 含義
bt 打印當(dāng)前線程調(diào)用棧
bt 10 打印tid=10的線程調(diào)用棧
thread apply all bt 打印所有線程的調(diào)用棧
f 5 切換到調(diào)用棧的第5層
t 10 切換到tid=10的線程
disassemble 查看匯編代碼
info reg 查看當(dāng)前的寄存器值
info threads 查看當(dāng)前進(jìn)程的所有線程
x /32wx 0x7198eb48 查看內(nèi)存
p *(Method*)0x6d682328 查看符號(hào)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市行楞,隨后出現(xiàn)的幾起案子攒暇,更是在濱河造成了極大的恐慌,老刑警劉巖子房,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件形用,死亡現(xiàn)場(chǎng)離奇詭異就轧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)尾序,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)钓丰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)躯砰,“玉大人每币,你說(shuō)我怎么就攤上這事∽列” “怎么了兰怠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)李茫。 經(jīng)常有香客問(wèn)我揭保,道長(zhǎng),這世上最難降的妖魔是什么魄宏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任秸侣,我火速辦了婚禮,結(jié)果婚禮上宠互,老公的妹妹穿的比我還像新娘味榛。我一直安慰自己,他們只是感情好予跌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布搏色。 她就那樣靜靜地躺著,像睡著了一般券册。 火紅的嫁衣襯著肌膚如雪频轿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天烁焙,我揣著相機(jī)與錄音航邢,去河邊找鬼。 笑死骄蝇,一個(gè)胖子當(dāng)著我的面吹牛猾愿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播全跨,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼孤紧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吃既?” 一聲冷哼從身側(cè)響起考榨,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鹦倚,沒(méi)想到半個(gè)月后河质,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年掀鹅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了散休。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乐尊,死狀恐怖戚丸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扔嵌,我是刑警寧澤限府,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站痢缎,受9級(jí)特大地震影響胁勺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜独旷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一署穗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嵌洼,春花似錦案疲、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至回溺,卻和暖如春春贸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遗遵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工萍恕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人车要。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓允粤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親翼岁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子类垫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 程序調(diào)試的基本思想是“分析現(xiàn)象->假設(shè)錯(cuò)誤原因->產(chǎn)生新的現(xiàn)象去驗(yàn)證假設(shè)”這樣一個(gè)循環(huán)過(guò)程,根據(jù)現(xiàn)象如何假設(shè)錯(cuò)誤原...
    Manfred_Zone閱讀 16,512評(píng)論 0 26
  • 1.gcc編譯琅坡,首先使用編譯選項(xiàng)-g(在編譯的時(shí)候產(chǎn)生調(diào)試信息)悉患。 2.進(jìn)入gdb的方法: (1)gdb a.ou...
    小餅干_7270閱讀 790評(píng)論 0 1
  • 調(diào)試前準(zhǔn)備 獲取進(jìn)程的內(nèi)核轉(zhuǎn)儲(chǔ)(core dump) why:最大好處是,其保存了問(wèn)題發(fā)生時(shí)的狀態(tài)榆俺。記錄進(jìn)程當(dāng)前狀...
    Gitlusen閱讀 920評(píng)論 0 2
  • 1.茲聲明售躁,此文章為本人原創(chuàng)坞淮,文責(zé)自負(fù)。2.如需轉(zhuǎn)載陪捷,麻煩您聯(lián)系作者回窘,并取得作者的明示同意。感謝市袖。 工作中遇到一個(gè)...
    黑白配ly閱讀 2,120評(píng)論 0 0
  • 在分析Android Native Error這一類問(wèn)題的時(shí)候啡直,如果能抓到異常進(jìn)程的coredump文件,那么對(duì)分...
    HuangTao_Zoey閱讀 6,188評(píng)論 0 7