日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用GDB Server进行远程调试

發布時間:2023/12/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用GDB Server进行远程调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

某些時候由于模擬環境的限制,調試必須要在目標板上進行。由于嵌入式系統資源比較有限,一般不能在目標板上直接構建GDB的調試環境,這時我們通常采用gdb+gdbserver的遠程調試方法:gdbserver在目標板中運行,而gdb則在主機上運行。

構建gdb+gdbserver調試環境的在于,要將gdb和gdbserver都編譯成適用于目標板的版本。比如我們用x86的主機和ARM目標板,平時在主機上直接調試的時候都使用用于x86調試的gdb,但這個gdb不能用于遠程調試中,需要針對ARM平臺進行配置之后重新編譯才行;而gdbserver要運行在目標板上,則需要用arm-linux-gcc編譯才行。

我們可以從http://ftp.gnu.org/gnu/gdb/ 或其他站點下載GDB的源代碼來進行編譯。得到源代碼包gdb-6.6.tar.gz之后,將target配置成arm-linux,然后進行編譯:

$ tar xzvf gdb-6.6.tar.gz

$ cd gdb-6.6

$ ./configure --target=arm-linux

$ make

$ make install

注意這時我們編譯的是用于主機上的gdb程序,因此仍然用x86版本的gcc編譯,而不是用arm-gcc。而接下來我們要編譯的gdbserver程序則是運行在目標板上的,需要用arm-gcc來編譯了,用CC=<your_arm-linux-gcc_path>來指定arm-linux-gcc編譯器:

$ cd gdb/gdbserver/

$ ./configure --target=arm-linux --host=arm-linux

$ make CC=/opt/toolchain/bin/arm-linux-gcc

$ make install

得到gdb和gdbserver之后,將gdbserver下載到目標板上就可以進行遠程調試了。我們還是以前面用過的overflow程序為例來說明,注意overflow程序也需要重新用arm-linux-gcc編譯得到ARM版本的overflow程序,并下載到目標板上。

完成這些之后可以用file命令來檢查所準備gdb和gdbserver及overflow程序的格式是否正確:

$ file arm-linux-gdb

arm-linux-gdb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

$ file overflow

overflow: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

$ file gdbserver

gdbserver: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

注意確保在目標板上運行的gdbserver及overflow程序被編譯成ARM ELF格式,而gdb由于是運行在主機上,還是x86格式的。

gdb和gdbserver之間可以通過TCP(格式為host:port)、UDP(格式為udp: host:port)或者串口(比如/dev/ttyb)來通信,我們以TCP方式為例來說明。

假設目標板的IP為192.168.2.1,主機為192.168.2.100,使用端口5678來調試,首先在目標板上運行gdbserver:

# gdbserver 192.168.16.1:5678 ./overflow

Process ./overflow created; pid = 618

Listening on port 5678

然后在主機上運行gdb,并運行gdb命令“target remote 192.168.2.1:5678”:

$ arm-linux-gdb ./overflow

GNU gdb 6.6

Copyright (C) 2006 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"...

(gdb) target remote 192.168.2.1:5678

Remote debugging using 192.168.2.1:5678

0x28556080 in ??()

(gdb)

接下來你就可以象前面所介紹的那樣使用gdb命令了,比如設置斷點及查看變量單步執行等。

?

http://hi.baidu.com/zesu/blog/item/9b709c2b41802ef2e6cd4093.html

?

轉載于:https://www.cnblogs.com/huaping-audio/archive/2009/06/19/1506898.html

總結

以上是生活随笔為你收集整理的用GDB Server进行远程调试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。