2 、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3 、当程序被停住时,可以检查此时你的程序中所发生的事。
> gcc -g hello.c -o hello
>g++ -g hello.cpp -o hello
如果没有 -g ,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。
当你用 -g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。
启动 GDB的方法有以下几种:
1.gdb<program>
program 也就是你的执行文件,一般在当然目录下。
2.gdb<program> core
用gdb同时调试一个运行程序和core文件。core 是程序非法执行后coredump后产生的文件。
3.gdb <program><PID>
如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程 ID 。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。
常用命令
1.run
进入gdb提示符后,gdb并没有进调试状态。
需要用r,即run进行调试。
2.break
通常至少要设一个断点,要不然gdb会直接运行到程序结束。
b main.cpp :100//mian文件100行设置断点。
3.continue
如果要恢复程序运行,可以使用c 或是 continue 命令。
4.list
当程序停下来以后,GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码。可以缩写为l。
list <linenum>
显示程序第linenum行的周围的源程序。
list <function>
显示函数名为function的函数的源程序。
list
显示当前行后面的源程序。
list -
显示当前行前面的源程序。
5.watch
观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有
watch <expr>
为表达式(变量) expr 设置一个观察点。一旦表达式值有变化时,马上停住程序。
rwatch <expr>
当表达式(变量) expr 被读时,停住程序。
awatch <expr>
当表达式(变量)的值被读或被写时,停住程序。
info watchpoints
列出当前所设置了的所有观察点。
6.next
单步跟踪,如果有函数调用,他不会进入该函数。
next或n。
7.step
单步跟踪,如果有函数调用,他会进入该函数。
step或s。
8.finish
运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。
9.print
print<expr> #显示表达式值。
print/f <expr> #f表示格式,如print /x 按十六进制显示。
GDB可以显示被调试程序的const常量、变量、函数,但不能显示宏内容。
10.quit
退出gdb。