交叉編譯android環(huán)境下gdb工具

一、前言

我們?cè)贚inux-x86_64咆畏、Linux-aarch64等環(huán)境下可以通過編譯對(duì)應(yīng)的gdb工具直接在宿主機(jī)上面進(jìn)行g(shù)db調(diào)試银觅,非常方便坞琴。但是我們發(fā)現(xiàn)在android上面進(jìn)行g(shù)db調(diào)試的話作郭,只能通過系統(tǒng)自帶的gdbserver和ndk自帶的host主機(jī)(一般都是window陨囊、Linux)上的gdb進(jìn)行網(wǎng)絡(luò)調(diào)試,非常的不方便夹攒。
對(duì)于這種需求蜘醋,我們是否可以像Linux-aarch64一樣利用交叉編譯出android環(huán)境的gdb工具,顯然是可以的咏尝。

二压语、準(zhǔn)備環(huán)境

1.官方下載gdb源碼:https://sourceware.org/pub/gdb/releases/?C=M;O=D
這里我選擇的是gdb-8.0.tar.gz

2.NDK環(huán)境準(zhǔn)備
這里我下載的是NDK-r18b, 下載地址:Unsupported Downloads · android/ndk Wiki · GitHub

重點(diǎn)說明下: gdb版本和ndk版本最好能匹配上,否則編譯過程中遇到各種不同的編譯報(bào)錯(cuò)問題(猜測(cè)是高版本的需要編譯器支持)编检。上面是我通過無數(shù)次實(shí)驗(yàn)得到的可以編譯通過版本胎食。

3.構(gòu)建android工具鏈
通過以下命令進(jìn)行編譯生成

export ANDROID_NDK="/opt/android-ndk-r18b"
//32位
sh ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=$HOME/android-toolchain_32 --toolchain=arm-linux-androideabi-4.9
//64位
sh ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh --arch=aarch64 --platform=android-21 --install-dir=$HOME/android-toolchain_64 --toolchain=aarch64-linux-android-4.9

三、編譯

1.解壓gdb-8.0.tar.gz

tar -xvf  gdb-8.0.tar.gz

2.進(jìn)入gdb-8.0目錄允懂,配置編譯腳本厕怜,如下

//64位,build_android64.sh
./configure --host=aarch64-linux-android  --target=aarch64-linux-android CC=aarch64-linux-android-gcc CXX=aarch64-linux-android-g++  --prefix=/home/yw/opensource/gdb-8.0/android64
make -j4
make install
//32位蕾总,build_android32.sh
./configure --host=arm-linux-androideabi  --target=arm-linux-androideabi CC=arm-linux-androideabi-gcc CXX=arm-linux-androideabi-g++  --prefix=/home/yw/opensource/gdb-8.0/android32
make -j4
make install

以上腳本最后是兩個(gè)單獨(dú)的sh腳本粥航,單獨(dú)編譯出來。記得編譯前make clean掉上次的緩存生百。及config.cache清理:

find . -name "config.cache" | xargs rm -f

3.環(huán)境變量配置
在用戶目錄下.bash_profile中添加工具鏈path:

export PATH=$PATH:/opt/android-ndk-r18b:/home/yw/android-toolchain_64/bin:/home/yw/android-toolchain_32/bin

然后執(zhí)行source .bash_profile命令激活递雀,或者在當(dāng)前終端直接執(zhí)行export都可以。

4.執(zhí)行編譯

sh build_android64.sh

以上為64位編譯腳本蚀浆,32位同理缀程。程序生成在對(duì)應(yīng)指定的目錄下。

四蜡坊、gdb調(diào)試使用

通過adb push gdb到android設(shè)備上杠输。運(yùn)行可能需要libc++_shared.so,在將NDK中的庫(kù)上傳到android設(shè)備上


image.png

現(xiàn)在就開始愉快使用gdb工具啦!


image.png

5.編譯過程可能遇到的問題及解決方法

1.類型沖突 Elf32_auxv_t Elf64_auxv_t
linux-low.c:116:3: error: typedef redefinition with different types (‘struct Elf32_auxv_t’ vs ‘struct Elf32_auxv_t’)
linux-low.c:131:3: error: typedef redefinition with different types (‘struct Elf64_auxv_t’ vs ‘struct Elf64_auxv_t’)
這個(gè)在ndk的elf.h 中已經(jīng)有定義秕衙,直接注釋掉gdb/gdbserver/linux-low.c 中的定義
2. setpwent 沒定義
complete.c:2060: error: undefined reference to ‘setpwent’
readline/complete.c 中假如宏判斷包含
#if defined(HAVE_GETPWENT)
setpwent ();
#endif
運(yùn)行段錯(cuò)誤

手動(dòng)加打印 發(fā)現(xiàn)在signals-state-save-restore.c --> save_original_signals_state 掛掉,
直接注釋掉internal_error這行蠢甲,如下:


image.png

參考鏈接:https://blog.csdn.net/shumanzhou/article/details/119148514

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市据忘,隨后出現(xiàn)的幾起案子鹦牛,更是在濱河造成了極大的恐慌,老刑警劉巖勇吊,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曼追,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡汉规,警方通過查閱死者的電腦和手機(jī)礼殊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門驹吮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晶伦,你說我怎么就攤上這事碟狞。” “怎么了婚陪?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵族沃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我泌参,道長(zhǎng)脆淹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任沽一,我火速辦了婚禮盖溺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锯玛。我一直安慰自己咐柜,他們只是感情好兼蜈,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布攘残。 她就那樣靜靜地躺著,像睡著了一般为狸。 火紅的嫁衣襯著肌膚如雪歼郭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天辐棒,我揣著相機(jī)與錄音病曾,去河邊找鬼。 笑死漾根,一個(gè)胖子當(dāng)著我的面吹牛泰涂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辐怕,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼逼蒙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了寄疏?” 一聲冷哼從身側(cè)響起是牢,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陕截,沒想到半個(gè)月后驳棱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡农曲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年社搅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡形葬,死狀恐怖却汉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荷并,我是刑警寧澤合砂,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站源织,受9級(jí)特大地震影響翩伪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谈息,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一缘屹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侠仇,春花似錦轻姿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至余素,卻和暖如春豹休,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桨吊。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工威根, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人视乐。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓洛搀,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親佑淀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子留美,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

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