前期准备
- 一般来说GDB主要调试的是C/C++的程序。在gdb调试之前,必须要把调试信息加到可执行文件中。使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点。如:
gcc -g hello.c -o hello
g++ -g hello.cpp -o hello
- 如果没有-g,将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。
启动 gdb 有三种方式:
- gdb
program是可执行程序。 - gdb
core
用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。 - gdb -p
通过top得到要调试程序的pid,然后进行调试。
参数
GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。常用的参数:
-symbols <file>
-s <file>
从指定文件中读取符号表。
-se file
从指定文件中读取符号表信息,并把他用在可执行文件中。
-core <file>
-c <file>
调试时core dump的core文件。
-directory <directory>
-d <directory>
加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。
当以gdb
运行时。可以设置下面四方面的事。
- 程序运行参数。
set args 可指定运行时参数(也可以指定配置文件)。(如:set args 10 20 30 40 50)
show args 命令可以查看设置好的运行参数。 - 运行环境。
path可设定程序的运行路径。
show paths 查看程序的运行路径。
set environment varname [=value] 设置环境变量。如:set env USER=hchen
show environment [varname] 查看环境变量。 - 工作目录。
cd相当于shell的cd命令。
pwd 显示当前的所在目录。 - 程序的输入输出。
info terminal 显示你程序用到的终端的模式。
使用重定向控制程序输出。如:run > outfile
tty命令可以指写输入输出的终端设备。如:tty /dev/ttyb
具体来说就是
例如一个程序名为prog 参数为 -l a -C abc
则,运行
gcc/g++ -g prog.c/cpp -o prog
就可以用gdb调试程序prog
gdb prog
进入gdb调试界面
输入参数命令set args 后面加上程序所要用的参数,注意,不再带有程序名,直接加参数,如:
set args -l a -C abc
回车后输入
r
即可开始