背景知识
通过上图,可以看到,gcc 和 g++ 默认形成的可执行程序是release的!!!故无法直接被调试。因此带 -g 选项表示使用 Debug 模式进行编译,而且我们可以看到,Debug 模式下编译形成的可执行程序的大小比 Release 模式下编译形成的可执行程序的大小要 大!!!
二者相比之下,多出来的内容为以下内容:
gdb有关的操作
gdb会记录最近一条命令,如果无变化,可以直接回车。
r(run):运行程序,开始调试,如果没有设置断点,就直接运行结束。
quit: 退出gdb。
b(break) + 行号:在某一行设置断点。
info b: 查看断点信息。
d(delete) + 断点编号:删除某一个断点。
d breakpoints: 删除所有断点。
n(next) : 单条语句执行。(相当于vs中的 F10)
s(step) : 进入函数调用。(相当于vs中的 F11)
set var: 修改变量的值。
finish : 将当前函数跑完,就停下来。
bt(breaktrace): 查看各级函数调用及参数。
p(print): 打印变量的值。
display 变量名: 跟踪查看一个变量,每次停下来都显示它的值。
undisplay 变量名:取消对先前设置的变量的跟踪。
until + 行号:眺至某一行(不建议使用)。
c(continue) : 运行到下一个断点处停下来。
disable + 断点编号:禁用该断点。
enable + 断点编号:启用该断点。
部分演示
演示所用代码:
#include <stdio.h>int AddToTop(int top)
{int res = 0;for( int i = 0; i <= top; i++ ){res += i;}return res;
}int main()
{int top = 100;int result = AddToTop(top);printf("result: %d\n", result);printf("hello 1\n");printf("hello 2\n");printf("hello 3\n");printf("hello 4\n");printf("hello 5\n");printf("hello 6\n");printf("hello 7\n");return 0;
}
部分指令操作演示: