GDB简介
GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。
一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序(按着自己的想法运行)。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
GDB支持以下编程语言 :
•Ada
•Assembly
•C
•C++
•D
•Fortran
•Go
•Objective-C
•OpenCL
•Modula-2
•Pascal
•Rust
GDB基本命令
命令 | 描述 |
---|---|
backtrace(或bt) | 查看各级函数调用及参数 |
finish | 执行到当前函数返回,然后停下来等待命令 |
frame(或f)帧编 | 选择栈帧 |
info(或i) locals | 查看当前栈帧局部变量的值 |
list(或l) | 列出源代码,接着上次的位置往下列,每次列10行 |
list行号 | 列出从第几行开始的源代码 |
list函数名 | 列出某个函数的源代码 |
next(或n) | 执行下一行语句 |
print(或p) | 打印表达式的值,通过表达式可以修改变量的值或者调用函数 |
set var | 修改变量的值 |
start | 开始执行程序,停在main函数第一行语句前面等待命令 |
step(或s) | 执行下一行语句、如果有函数调用则进入到函数中 |
break(或b)行号 | 在某一行设置断点 |
break 函数名 | 在某个函数开头设置断点 |
break…if… | 设置条件断点 |
continue(或c) | 从当前位置开始连续而非单步执行程序 |
delete breakpoints | 删除断点 |
display变量名 | 跟踪查看一个变量,每次停下来都显示它的值 |
disable breakpoints | 禁用断点 |
enable breakpoints | 启用断点 |
info(或i) breakpoints | 查看当前设置了哪些断点 |
run(或r) | 从头开始连续而非单步执行程序 |
undisplay | 取消对先前设置的那些变量的跟踪 |
watch | 设置观察点 |
info(或i) | 查看当前设置了哪些观察点 |
watchpoints | 从某个位置开始打印存储器的一段内容,全部当成字节来看,而不区分哪些字节属于哪些变量 |
#include<stdio.h>
#ifdef _PRINT_
void print(){
printf("hello world\n");
}
int main(){
int i;
for(i = 0;i<5;i++){
printf("%d\n",i);
}
print();
return 0;
}
#endif
#ifdef _CORE_
#include<stdio.h>
int main(int argc,const char *argv[]){
int *temp = NULL;
*temp = 10;
return 0;
}
#endif
#ifdef _ING_
#include<stdio.h>
#include<unistd.h>
int main(){
while(1){
int i;
i++;
printf("%d\n",i);
}
return 0;
}
#endif
根据进程号GDB调试
ps -ef | grep a.out
gdb a.out -p 7558