LINUX调试工具 gdb使用
什么是gdb?
它是一种针对多种语言的Debug工具,包括C和C++ 它可以让你在程序的特定位置检查程序正在做什么 像段错误这样的简单错误可以通过gdb工具比较简单的找出来
使用步骤:
1.编译
gcc test.c -o test -g 添加一个额外的-g选项,这样可以让程序支持debug,从而我们就可以使用gdb对程序进行调试。
2.使用
1.终端中输入gdb test 进入gdb调试模式 2.下断点: break 函数名 如:break main break test.c 8 在test.c的第8行下断点 3.运行 输入run跑起来程序,下一步:n/next 4.查看程序中的变量值 print i display i
注:通过gdb下的help命令,这样就能得到对命令比较完整的描述:如: help file
更详细的使用方法可参考如下指令自行调试:
命令 | 命令缩写 | 命令说明 |
---|---|---|
list | l | 显示多行源代码 |
break | b | 设置断点,程序运行到断点的位置会停下来 |
info | i | 描述程序的状态 |
run | r | 开始运行程序 |
display | disp | 跟踪查看某个变量,每次停下来都显示它的值 |
step | s | 执行下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句 |
next | n | 执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句) |
p | 打印内部变量值 | |
continue | c | 继续程序的运行,直到遇到下一个断点 |
set var name=v | 设置变量的值 | |
start | st | 开始执行程序,在main函数的第一条语句前面停下来 |
file | 装入需要调试的程序 | |
kill | k | 终止正在调试的程序 |
watch | 监视变量值的变化 | |
backtrace | bt | 产看函数调用信息(堆栈) |
frame | f | 查看栈帧 |
quit | q | 退出GDB环境 |
有条件的断点
有时我们并不是想要在任何情况下都中断程序,最简单的一个例子,在一个for
循环中通过简单的排查,程序仅仅在i >= 100
的时候才出现问题,那面当i = 100
的时候就不需要中断程序。通过下面的命令就可以实现这样的功能:
(gdb) break p.c:6 if i >= 100
这条命令在文件p.c
的第六行上设置了一个断点,触发断点的条件是变量i
的值大于等于100