GDB的基本使用方法(之一)
1.编译程序
如果要让GDB调试程序,则编译生成程序时,要添加-g编译选项:
$gcc -Wall -O2 -g 源文件
编译器含有针对源代码中的各种各样的错误输出信息的功能,称为警告选项。这些信息并不一定是错误,但却指出了容易引发bug的编码方式。-Werror选项可以在警告发生时,将其当做错误来处理。
-O2是优化选项,编译程序时加上该选项,会产生2中副作用:
副作用一:实际的执行顺序可能由于优化而与源代码顺序不同,例如内敛函数优化,从目标文件中去掉了内敛函数的入口点,导致无法在内敛函数名上设置断点;
副作用二:局部变量被保存到寄存器中,因此无法显示局部变量的内容,必须直接查看寄存器的值。
既然有这些副作用,那为什么还要加上-O2的优化选项呢?因为如果不加上优化选项,那就必须管理有优化和无优化的两种可执行文件,因为有时候一个bug可能在未优化版本中存在,但是在优化版本中不存在,这样,管理成本会上升。所以,编译程序时还是加上优化选项。
2.GDB启动/附着程序
GDB启动程序命令如下:
sudo gdb 程序名
GDB附着程序命令如下:
sudo gdb attach 程序PID
3.设置/查看断点
GDB设置断点使用break命令,可以简写为b,其形式是:
break 断点
其中断点可以是函数名、文件行号等,具体的设置断点的格式有以下8种:
1.break 函数名
2.break 行号
3.break 文件