在 Linux 下开发中,遇到程序功能异常或者奔溃的时候,就需要借助调试工具对程序进行检查。GDB
是 GNU 开源组织发布的一个强大的 Linux 下的命令行程序调试工具。-g 标志是对程序进行调试性编译时常用的一个选项,必须在编译链接每个需要调试的源文件时都加上这个选项。
1、GDB 调试可执行文件
通常情况下,gdb 可调试程功能错误的可执行文件,如排序不完整序……程序奔溃(core)的可执行文件,
如信号 11SIGSEGV 导致的段错误…..
启动 gdb:开始调试可执行程序的格式为:gdb 可执行文件(带路径)
运行程序:使用 run 命令来执行这个程序,可简写成 r。如果调试带参数的程序,在 run 命令中给出的所有参数都将作为程序的参数传递给程序。如果还没有设置断点的话,程序就一次执行完或者直接奔溃。
断点调式:用 break 行号或函数名,就会指定行或进入此函数时设置断点,当执行 run 后,程序在第一个断点处暂停,以后每次执行都断点处程序都会停下来。
可以用 info break 查看当前程序设置的所有断点的详细信息,在进入某个函数之后使用 finish 命令可一次性退出该函数的运行。
用 cont 或 continue 命令继续执行程序直到它遇到下一个断点,next 命令是逐行执行每一行代码。
使用 delete 命令删除指定的断点,但通常只是使用 disable 将某个断点禁用,需要的时候再激活就可以了。使用 commands 命令可以在调试过程中打补丁修改程序而不需要改变程序源代码重新编译,具体方法是将某个断点与相应操作结合起来,在程序运行至该断点时不是停下来,而是执行 commands 命令定制的一套指令。如先 commands 2,再 set variable n=n+1,然后 cont,最后 end 保存退出,就是在程序运行至断点 2 处时,将变量 n 加 1,然后继续运行至下一断点。
查看函数堆栈:键入 backtrace/bt 或 where 命令,就会看到程序崩溃时或暂停时的堆栈信息,就是当前所有已调用函数的列表,包括此时的参数取值和行号。
检查变量:用调试器检查参数参数、局部变量和全局数据的内容,print 命令的作用就是显示出程序奔溃或暂停时变量和表达式的值。
列出程序源代码:在 gdb 中使用 list 命令默认会打印出围绕当前位置前后的 10 行代码,也可以给 list
命令提供一个