看板 LinuxDev 關於我們 聯絡資訊
大家好~是這樣子 最近正在嘗試使用GDB來除錯 我寫了一個簡單的範例想要來測試看看 在機器上使用沒啥問題 但利用遠端GDB就會跑不出來 不是很懂原因~所以po上來請教大家 test.c: #include <stdio.h> #include <stdlib.h> #include <string.h> void func(char* str) { int aa = 10; char arr[100]; printf("------ aa = %d\n", aa); memcpy(arr, str, strlen(str)); } int main(void) { char* str = "HelloWorld"; func(str); return 0; } 利用指令 arm-linux-gcc -g test.c -o test編出執行檔後 在機器上執行GDB: gdb test (gdb) run ... ← 接下來使用GDB的指令都沒啥問題 不過接下來想要利用遠端GDB時卻怪怪的 假設主機IP是192.168.0.101,而機器上IP是192.168.0.102 機器上: gdbserver 192.168.0.101:12345 test 這時會出現訊息: Listening on port 12345 此時在本機上輸入 arm-linux-gdb test (gdb) target remote 192.168.0.102:12345 這時候在機器上會出現 Remote debugging from host 192.168.0.101 此時若我輸入run指令會出現 The "remote" target does not support "run". Try "help target" or "continue". 我知道遠端GDB沒這個指令~於是照他說的輸入continue 結果就出現這個訊息 Program received signal SIGSEGV, Segmentation fault. 0x2aba23c0 in _dl_fini () 不管輸入continue、next都會出現,想要print變數也不能 即使有設定中斷點也是 (但list指令是正常的 @@) 但我在機器上執行GDB的時候 只要有先執行run指令 其他的指令,像是list print next continue都是正常的 補充一下我的環境設定 本機: VMware 9 + Ubuntu tool chain: arm-linux 機器GDB版本: 6.6 arm-linux-gdb版本: 7.2 不知道是不是因為兩端的GDB版本不同的關係@@ 在此就先謝謝大家的幫忙囉~ -- ▍ ▍ ╯╰ ╯╰ ◢◣ ◢◣ 我最愛的 柏柏龍~ 柏柏龍~ ◢██◣ ╮╭ ▎▎╮╭ ▎▎ 柏柏龍~ 柏柏龍~ ⊙ ⊙ ⊙ ⊙ 人人心中都有柏柏龍~ ≡ ▼ ≡ ▲▲ ● ● ≡ ▼ ≡ ■ ■ ■ ■ 憤怒就永遠不會消失~ ⊙⊙ ≡皿 ≡ 炸是最美的擁有~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.179.30
ah7675:host端的gdb要另外build, config target=arm 11/12 23:54
yvb:樓上認為原PO的 arm-linux-gdb 是什麼東西? 11/13 00:26
donby:後來我自己試了一下~好像真的是版本問題@@ 我把本機的和 11/13 10:29
donby:機器的都換成7.2的就好了@@ 給大家參考一下囉 11/13 10:30
ah7675:喔 沒看到那行 拍謝原po, 但甘yvb屁事 自以為了不起 11/14 00:03