gdb 遠端qemu arm除錯

2021-09-07 05:48:20 字數 2013 閱讀 1066

把 c 編譯成 arm 指令的可執行檔案

/usr/bin/arm-linux-gnueabi-g++ hello.cpp 

cat hello.cpp 

#include void crash()

int main()

直接執行報錯。由於 host 是 linux x86

$ ./a.out 

-bash: ./a.out: cannot execute binary file

須要用 qemu-arm 來執行, 結果是期望的

qemu-arm -l  /usr/arm-linux-gnueabi/  a.out 

hello world

qemu: uncaught target signal 11 (segmentation fault) - core dumped

segmentation fault (core dumped)

進行遠端除錯(關鍵是新增 -g 引數,指定port為1235) 

qemu-arm -g 1235

-l  /usr/arm-linux-gnueabi/  a.out 

執行用 linux-x86 的 gdb 並不能列印 symbol

(gdb) target remote :1235

remote debugging using :1235

(gdb) c

continuing.

program received signal sigsegv, segmentation fault.

0x00000000 in ?? ()

(gdb) bt

#0 0x00000000 in ?? ()

cannot access memory at address 0x0

(gdb) file /home/payne/hello/a.out

a program is being debugged already.

are you sure you want to change the file? (y or n) y

reading symbols from /home/payne/hello/a.out...(no debugging symbols found)...done.

(gdb) bt

#0 0x00000000 in ?? ()

cannot access memory at address 0x0

(gdb)

懷疑要使用 arm 的 gdb 

參見 編譯了 arm 的gdb, 執行後定位到 crash()

qemu-arm -l  /usr/arm-linux-gnueabi/  ./gdb 

(gdb) target remote :1235

remote debugging using :1235

warning: can not parse xml target description; xml support was disabled at compile time

0x40801c40 in ?? ()

(gdb) file /home/payne/hello/a.out

a program is being debugged already.

are you sure you want to change the file?

(y or n) y reading symbols from /home/payne/hello/a.out...(no debugging symbols found)...done. (gdb) c continuing. program received signal sigsegv, segmentation fault. 0x0000841e in crash() () (gdb)

結論:

難道說 arm 的 gdbserver, 就僅僅能用 arm 的 gdb?

gdb 遠端qemu arm除錯

把 c 編譯成 arm 指令的可執行檔案 usr bin arm linux gnueabi g hello.cpp cat hello.cpp include void crash int main 直接執行報錯,因為 host 是 linux x86 a.out bash a.out canno...

GDB遠端除錯

3.建立配置檔案 編譯 gdb允許把編譯配置和編譯結果放到任意的目錄,因此可以在gdb目錄之外建立乙個專門存放編譯結果的目錄。cd opt mkdir p arm gdb build cd arm gdb build opt gdb 6.6 configure target arm linux pr...

遠端gdb除錯

在主機上準備目標機的gdb,例如目標機為arm,則準備arm linux gdb 目標機上需要安裝gdbserver 在目標機上用gdbserver執行程式 gdbserver 127.0.0.1 2345 test 注意,待除錯的程式編譯時需要加上 g 引數。在主機上發起鏈結和除錯 進入gdb g...