gcc/g++形成的可执行程序默认是release版的。若要生成debug版,应使用-g选项。
 如:gcc -o mytest test.c -g -std=c99
可以看到debug版包含了调试信息:
 
使用:gdb 文件名:
 
补充:
 以下所有的查看指令都不会影响调试运行的执行流。
显示代码:l或list
 
gdb启动后输入l 行号,显示从指定行开始的一部分代码。
 如果只输入l,会随机显示一定行数。
 后续再输入l,或按回车,会显示后续几行的内容,直到显示了全部内容。
 
运行:r或run
 
不打断点直接使用r相当于在VS下直接按F5:
 
调试过程中再次r可以选择从头开始运行:
 
断点:b或breakpoint
 
打断点
方式1:b 行号 或 b 源文件名:行号
 

方式2:b 源文件名:函数名
 

 ↑断点的行号是函数内容的起始位置,而不是函数名的所在行。
查看断点:info b。
 
这里的Num是断点的编号,Enb是断点有效性,为n则该断点为空断点。
 
删除断点:d 断点编号。
 
设置空断点:disable breakpoint 断点编号。
 
重新启用空断点:enable breakpoint 断点编号。
 
打断点后再r就会在断点处停下,此时再info b会显示断点被命中的次数
 
运行到下一个断点(相当于VS打断点后F5):c或continue
 

逐过程(相当于VS的F10):n或 next
 
逐函数执行,执行完后不会停在函数末尾,而是会来到下一行。
 相比VS,gdb的逐过程执行需要程序已经开始测试运行,而不能没运行就直接n,所以会需要断点辅助。
 
逐语句(相当于VS的F11):s或step
 
从断点处往后执行一条语句,遇到函数则进入函数逐语句执行。
查看当前的函数调用链:bt
 
会从栈顶到栈底显示调用的函数。
 
查看当前变量值:p 变量名
 

常显示变量值:display 变量名
 
可显示内置类型,以及结构体等自定义类型。
 每个常显示的变量都会有对应编号用于管理 。
 
取消常显示:undisplay 变量编号
 

不打断点运行到指定行数(用于跳过循环):until 行号
 

执行完当前函数:finish
 
进到函数内以后,不依靠断点而将当前函数执行完毕后停下并显示函数的返回值。
 
调试过程中将变量设为特定值:set var 变量名=目标值
 




















