GDB是GNU Debuger的缩写。有Windows版本,DDD是以GDB为后台的调试工具,GDB支持C/C++、Pascal、Fortran。
使用GDB调试程序:为了让GD B可以获得程序的信息,需要在编译的时候加入参数g。这时,编译命令变为了”gcc -o p3.4 -g p3.4.c”。
GDB 提供了执行Shell命令的功能。输入“shell 命令”,可执行shell脚本,如”shell ls”;
list: 现实代码内容。如: list、list 3,8;
run: 在GDB中运行加载的可执行程序;
set args 具体参数:设置程序运行时的参数;
show args:查看程序运行时的参数;
print: 具体使用命令为”print 变量名”。在程序调试中,可以使用print命令在程序运行时查看变量的取值情况;
whatis(ptype): 具体使用形式为“whatis 变量名”。在调试中,可以使用whatis查看变量的类型。ptype提供了类似的功能,相比whatis而言,该命令功能更为强大,可以给出结构体的定义情况。
break: 设置程序运行断点。主要有以下的命令形式:
“break 行号”,运行到某行停止运行;
“break 函数名称”,程序进入指定函数时停止运行;
“break 行号/函数名 if 条件”,在符合条件时,运行到指定行号/函数的时候停止程序运行。
continue:从断点位置处继续执行程序;
info break:现实当前设置的断点信息;
delete breakpoint 断点号:删除指定的断点;
disable breakpoint 断点号:禁用指定的断点;
enable breakpoint 断点号:允许指定的断点;
next/step:next 使程序单步执行。如果在代码中遇到了某个函数,想进入该函数,了解程序运行情况,可以使用step命令。使用finish退出函数回到调用该函数处。
GDB还支持对已经运行的进程进行调试。使用file命令指定进程所联系的源代码,然后用”attach 进程ID”来连接一个运行的进程。使用continue命令可以继续进程的运行。用detach可以断开调试的连接。如下为GDB常用命令列表:
常用GDB调试命令简表
命令 |
说明 |
备注 |
file 文件名 |
在gdb中载入某可执行文件 |
|
break |
设置断点 |
break 支持如下的几种形式: break 行号; break 函数名称; break 行号/函数名 if 条件 |
info |
查看和可执行程序相关的各种信息 |
info breakpoint 只是众多info命令中的一种,info可以查看可执行程序的很多信息,例如,info function可以查看所有函数名称。关于info命令的具体用法,可以在GDB中使用help info查看相关的帮助 |
kill |
终止正在调试的程序 |
|
|
现实变量或表达式的值 |
调用形式是”print 变量或表达式” |
set args |
设置调试程序的运行参数 |
调用格式为”set args 参数列表” |
delete |
删除设置的某个断点或观测点 |
delete后可以使用breakpoints、checkpoint、display、mem和tracepoints,具体使用情况可以在gdb中输入help delete查看 |
clear |
删除设置在指定行号或函数上的断点 |
|
continue |
从断点处继续执行程序 |
|
list |
列出GDB中加载的可执行程序的代码 |
不带任何参数使用list命令时,会从开始位置列出所有陈旭代码,同时list还支持列出指定行号之间的代码,具体命令为”list num1, num2” |
watch |
在程序中设置观测点(如果数据改变,将给出变化前后的情况) |
|
run |
运行在GDB中加载的可执行程序 |
|
next |
单步执行所加载的程序 |
|
step |
进入所调用的函数内部,查看执行情况 |
退出调用函数,回到调用处使用finish命令 |
whatis |
查看变量或函数类型 |
调用格式为”whatis 变量名/函数名” |
ptype |
显示数据结构定义情况,与whatis不同的是,ptype可以显示类或数据结构的定义情况 |
调用命令为”ptype 变量名” |
make |
在不退出GDB调试环境的情况下,编译程序 |
|
quit |
退出GDB调试环境 |
|
“help 具体分类” 可以查看支持的具体命令,如”help running”。
在GNU项目中,比较成功的图形化调试工具,它们依赖于后台运行的命令调试工具,比较成功的有DDD调试工具。DDD是Data Display Debugger的缩写。DDD可以做为GDB、DBX、WDB、Ladebug、JDB、XDB、Perl调试器或Bash调试工具等很多命令调试工具的图形前端。
GDB远程调试
在嵌入式开发中,进行开发的机器称为宿主机。目前,在嵌入式环境下,Linux的内核调试和用户程序调试主要是使用KGDB和gdbserver来实现的。KGDB可以对内核的运行情况进行远程调试。而使用gdbserver可以通过远程调试用户空间的程序。如下以在嵌入式开发中使用GDB+gdbserver为例,说明如何进行远程调试和程序开发:
1. 在目标板上运行gdbserver。使用gdbserver命令指定宿主机的IP地址和连接端口号,如:”gdbserver 192.168.2.1:8888 program”表示在gdbserver中加载program程序,宿主机IP地址为192.168.2.1,在目标板的8888端口监听通信;
2. 在宿主机上运行GDB或DDD调试工具,使用target命令来连接gdbserver,如:”target remote 192.168.2.2:8888”表示连接IP地址为192.168.2.2,端口号为8888的目标板。