1
下载调试器源代码 调试器的源代码可以在 GNU 的网站上下载到:
http://www.gnu.org/software/gdb/download/
本文档以网站上最新的版本 7.0.1 为编译对象。
2
编译调试器源代码 2.1
服务器环境 在编写本文档的时候,所使用的服务器环境如下:
CPU
: Intel(R) Pentium(R) D CPU 2.80GHz
MEM
: 1.5GB
OS
: Fedora 9 , x86_64 位版本
2.2
源代码文件结构 下载的源代码包文件名是 gdb-7.0.tar.tar ,需要在 Linux 下解压缩:
# tar xzvf gdb-7.0.tar.tar
解压缩后会生成一个新的目录 gdb-7.0 ,目录结构如下:
2.3
编译gdb 在编译 gdb 之前,首先需要建立一个文件夹。我们建立一个跟 gdb-7.0 平行的文件夹:
进入文件夹 buildgdb :
# cd buildgdb
然后运行 configure 指令:
# ../gdb-7.0/configure --target=mips-linux --prefix=/home/wangtq/test/buildgdb
(注: --target 是指目标机器的 cpu 架构,我们现在用的是 mips 架构的 cpu ,所以使用 mips-linux 。如果你用的是 ARM 架构的 cpu ,则 target 的值设为 arm-linux 。 --prefix 指定了将文件安装在什么地方,示例中将文件安装在 buildgdb 所在的目录。 )
指令运行的效果如下图所示:
Configure 执行后,会去检测 Linux 系统中是否安装了运行所需要的工具以及当前系统的配置,并根据这些信息生成 Makefile 文件。
运行完成后,依次执行下列的指令:
# make
# make install
这时,我们看到在 buildgdb 目录下有如下的目录结构:
在 bin/ 目录下,有三个文件:
这三个文件就是我们所需要的文件。将这三个文件复制到 /bin 目录下:
# cp mips-linux-* /bin
gdb 的编译到此完成。
2.4
编译gdbserver 跟编译 gdb 一样,编译 gdbserver 时,我们也需要建立一个文件夹,比如:
# mkdir buildgdbserver
这时,目录结构如下:
我们进入目录 buildgdbserver ,然后执行 gdbserver 的 configure 文件:
# cd buildgdbserver
# ../gdb-7.0/gdb/gdbserver/configure --host=x86_64-linux --target=mips-linux CC=/cross_compile_path/cross_compile_gcc
(注: --host 是指 Linux Server 的 CPU 架构。我们使用的是 x86 的 64 位机,所以指定为 x86_64-linux, 如果是 32 位的 x86 ,则为 x86-linux 。 --target 的含义跟编译 gdb 时的定义一样。 CC 定义了交叉编译工具,请输入实际所使用的交叉编译工具 gcc 。 )
跟 gdb 的编译一样, configure 会检测系统配置,然后生成 Makefile 文件。
下图是 configure 的一个示例:
运行完成后,执行 make 指令 :
# make
这时,在 buildgdbserver 下会生成 gdbserver 和 gdbreplay 两个工具。将这两个工具 copy 到你的 NFS 目录下的 bin 文件夹里,比如在我们的 Linux Server 下的目录 /var/lib/tftpboot/rootfs.liqh/bin/ ,或者通过工具把它们下载到板子上。
3
开始调试 下图是基本的调试架构:
目标开发板和主机通过网络连接在一起,目标板上运行 gdbserver ,开发板上运行 gdb 。
首先,在开发板启动 u-boot 并等进入了 NFS 后,输入命令:
# gdbserver HostIP ort prog
其中 HostIP 是指 Linux Server 的 IP , Port 可以随意指定为大于 1024 的值。 prog 是你需要调试的代码。注意,在编译 prog 的时候,必须加上 -g 选项。
比如在调试 PVRDemo 的时候,等板子启动完成后,将驱动等装载后,输入:
# gdbserver 10.2.100.251:2222 PVRDemo
这时会出现 ”Listening on port 2222” 的提示,如下图:
接着在 Linux Server 上依次输入:
# mips-linux-gdbtui /nfs_path/prog
#(gdb) target remote TargetIP ort
mips-linux-gdbtui 是一个带调试代码的工具,可以在运行到断点的时候,显示出断点处的代码。如下图所示:
“ /nfs_path/prog ”是指你当前运行的带调试信息的程序。这个程序必须跟我们在板子上启动的程序是同一个。
“ target remote TargetIP ort ”: target remote 使得我们在 Host 端调试器和板子上的 gdbserver 建立 TCP/IP 通讯, TargetIP 是板子的 IP 地址, Port 跟板子上使用 gdbserver 时使用的 Port 相同。
通讯成功以后,我们能够在 Host 端的调试器上看到类似于如下的信息:
(gdb) target remote 10.2.100.249:2222
Remote debugging using 10.2.100.249:2222
这时,在 Linux Server 上输入:
(gdb) c
程序开始执行。
下载调试器源代码 调试器的源代码可以在 GNU 的网站上下载到:
http://www.gnu.org/software/gdb/download/
本文档以网站上最新的版本 7.0.1 为编译对象。
2
编译调试器源代码 2.1
服务器环境 在编写本文档的时候,所使用的服务器环境如下:
CPU
: Intel(R) Pentium(R) D CPU 2.80GHz
MEM
: 1.5GB
OS
: Fedora 9 , x86_64 位版本
2.2
源代码文件结构 下载的源代码包文件名是 gdb-7.0.tar.tar ,需要在 Linux 下解压缩:
# tar xzvf gdb-7.0.tar.tar
解压缩后会生成一个新的目录 gdb-7.0 ,目录结构如下:
2.3
编译gdb 在编译 gdb 之前,首先需要建立一个文件夹。我们建立一个跟 gdb-7.0 平行的文件夹:
进入文件夹 buildgdb :
# cd buildgdb
然后运行 configure 指令:
# ../gdb-7.0/configure --target=mips-linux --prefix=/home/wangtq/test/buildgdb
(注: --target 是指目标机器的 cpu 架构,我们现在用的是 mips 架构的 cpu ,所以使用 mips-linux 。如果你用的是 ARM 架构的 cpu ,则 target 的值设为 arm-linux 。 --prefix 指定了将文件安装在什么地方,示例中将文件安装在 buildgdb 所在的目录。 )
指令运行的效果如下图所示:
Configure 执行后,会去检测 Linux 系统中是否安装了运行所需要的工具以及当前系统的配置,并根据这些信息生成 Makefile 文件。
运行完成后,依次执行下列的指令:
# make
# make install
这时,我们看到在 buildgdb 目录下有如下的目录结构:
在 bin/ 目录下,有三个文件:
这三个文件就是我们所需要的文件。将这三个文件复制到 /bin 目录下:
# cp mips-linux-* /bin
gdb 的编译到此完成。
2.4
编译gdbserver 跟编译 gdb 一样,编译 gdbserver 时,我们也需要建立一个文件夹,比如:
# mkdir buildgdbserver
这时,目录结构如下:
我们进入目录 buildgdbserver ,然后执行 gdbserver 的 configure 文件:
# cd buildgdbserver
# ../gdb-7.0/gdb/gdbserver/configure --host=x86_64-linux --target=mips-linux CC=/cross_compile_path/cross_compile_gcc
(注: --host 是指 Linux Server 的 CPU 架构。我们使用的是 x86 的 64 位机,所以指定为 x86_64-linux, 如果是 32 位的 x86 ,则为 x86-linux 。 --target 的含义跟编译 gdb 时的定义一样。 CC 定义了交叉编译工具,请输入实际所使用的交叉编译工具 gcc 。 )
跟 gdb 的编译一样, configure 会检测系统配置,然后生成 Makefile 文件。
下图是 configure 的一个示例:
运行完成后,执行 make 指令 :
# make
这时,在 buildgdbserver 下会生成 gdbserver 和 gdbreplay 两个工具。将这两个工具 copy 到你的 NFS 目录下的 bin 文件夹里,比如在我们的 Linux Server 下的目录 /var/lib/tftpboot/rootfs.liqh/bin/ ,或者通过工具把它们下载到板子上。
3
开始调试 下图是基本的调试架构:
目标开发板和主机通过网络连接在一起,目标板上运行 gdbserver ,开发板上运行 gdb 。
首先,在开发板启动 u-boot 并等进入了 NFS 后,输入命令:
# gdbserver HostIP ort prog
其中 HostIP 是指 Linux Server 的 IP , Port 可以随意指定为大于 1024 的值。 prog 是你需要调试的代码。注意,在编译 prog 的时候,必须加上 -g 选项。
比如在调试 PVRDemo 的时候,等板子启动完成后,将驱动等装载后,输入:
# gdbserver 10.2.100.251:2222 PVRDemo
这时会出现 ”Listening on port 2222” 的提示,如下图:
接着在 Linux Server 上依次输入:
# mips-linux-gdbtui /nfs_path/prog
#(gdb) target remote TargetIP ort
mips-linux-gdbtui 是一个带调试代码的工具,可以在运行到断点的时候,显示出断点处的代码。如下图所示:
“ /nfs_path/prog ”是指你当前运行的带调试信息的程序。这个程序必须跟我们在板子上启动的程序是同一个。
“ target remote TargetIP ort ”: target remote 使得我们在 Host 端调试器和板子上的 gdbserver 建立 TCP/IP 通讯, TargetIP 是板子的 IP 地址, Port 跟板子上使用 gdbserver 时使用的 Port 相同。
通讯成功以后,我们能够在 Host 端的调试器上看到类似于如下的信息:
(gdb) target remote 10.2.100.249:2222
Remote debugging using 10.2.100.249:2222
这时,在 Linux Server 上输入:
(gdb) c
程序开始执行。
这个时候,你可以设置断点,观察变量,查看函数调用堆栈等等。
文章出处:http://bbs.chinaunix.net/thread-1940280-1-1.html