Linux中gdb使用
gdb是linux中的调试器,默认情况下,gcc和g++生成的是release版本,要使用gdb调试,需要加上-g选项
退出:ctrl+d或quit
debug:编译器形成可执行程序的时候会给程序添加调试程序。
可以看到,a.out确实比code.exe大,因为添加了调试信息。
常用选项:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb
使用案例
以下是code.c代码:
1 #include<stdio.h>2 int main()3 {4 printf("66666\n");5 printf("66666\n");6 printf("66666\n");7 printf("66666\n");8 printf("66666\n");9 printf("66666\n");10 printf("88888\n");11 printf("66666\n");12 printf("66666\n");13 printf("66666\n");14 printf("66666\n");15 printf("66666\n");16 printf("66666\n");17 return 0;18 19 }20
进入gdb模式
查看文档
当然,也可以查看函数,显示上下文
运行
打断点
查看断点(info b)
删除断点
d num
运行到断点处
禁用断点
启动断点
逐过程(或者n)不进入函数,直接执行;逐语句step(s),可进入函数内部
下面有一个123.c文件
1 #include<stdio.h>2 int main()3 { 4 int i=0;5 while(i<10)6 {7 printf("%d\n",i);8 i++;9 }10 return 0;11 }
在此处打一个断点
查看变量
查看变量地址
自动显示变量(常显示)
如果不想显示就undisplay
查看函数调用
gdb使用大致如上,但是调试方法不止一种,能找到问题就是好方法。