gdb 调试利器
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c++程序员,gdb是必不可少的工具
测试代码
#include <stdio.h>
int nGlobalVar = 0;
int tempFunction(int a, int b){
printf("\n tempFunction is called, a = %d, b = %d \n", a, b);
return (a + b);
}
int main(){
int n;
n = 1;
n++;
n--;
nGlobalVar += 100;
nGlobalVar -= 12;
printf("\n n = %d, nGlobalVar = %d \n", n, nGlobalVar);
n = tempFunction(1, 2);
printf("\n n = %d\n", n);
return 0;
}
常用基本命令
-
r
Run的简写,运行被调试的程序。
如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 -
c
Continue的简写,继续执行被调试程序,直至下一个断点或程序结束 -
b 行号
|b 函数名
b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。 -
d 编号
d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 -
s
|n
s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”;
n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。 -
p 变量名
Print的简写,显示指定变量(临时变量或全局变量)的值。 -
q
Quit的简写,退出GDB调试环境。 -
bt
|where
显示栈信息
启动gbd
对C/C++程序的调试,需要在编译前就加上-g选项:
g++ -g hello.cpp -o hello
加载可执行文件
file hello
开始测试命令
- r 当没有设置断点时,运行 r 直接执行完
- 设置断点 分别在两个函数入口设置断点
- 如果有断点,则程序暂停在第一个可用断点处。
- c 继续执行被调试程序,直至下一个断点或程序结束
- 查看栈 (腾讯暑期面试问到了,注意啊)
- 查看变量数值
- q 退出GDB调试环境。
网友评论