Linux调试
先罗列一下需要掌握的如下:
- list/l 行号:显示binFile源代码;l 1 从第一行开始显示,每次显示10行
- list/l 函数名:列出某个函数的源代码
- run/r:运行程序
- next/n:单条执行
- step/s:进入函数调用
- break/b 行号:在某一行设置断点
- break 函数名:在某个函数开题设置断点
- delete breakpoint/b n :删除序号为n的断点
- info b查看当前设置了哪些断点
- display 变量名 :跟踪查看一个变量,每次停下来都显示它的值
- undisplay 编号:取消对变量的跟踪
本文就linux下如何调试程序,gdb调试程序都有哪些指令做出回答。
环境:VS2013,centos7
如果一个程序可以被调试,该程序的二进制一定加入了一些debug信息以vs为例
同样道理,Liux可以被调试应该加入(centos默认releasem模式)
0.0 生成有调试信息的文件(gcc test.c -o test -g)
gcc test.c -o test -g
可以看到,加入调试信息后,文档变大
首先编写如下test.c
1.0 进入调试 gdb test
gdb test
调试步骤
先调出行号---->打断点---->运行
2.0 显示行号,便于打断点 list/l 行号
显示binFile源代码,接着上次的位置往下列,每次列10行
l 1 //从第一行开始显示,显示10行
##3.0 打断点 break(b) 行号
b 行号:在某一行设置断点
1号断点在0x10056a断点处,文件是在file test.c 第16行
查看当前的断点情况(有几个断点,当前)
info b
Enb y 显示是启用当前断点
4.0运行 r
mian函数的16行停下来了
5.0 逐过程F10 n 逐语句F11 s
n 或 next:单条执行 s或step:进入函数调用
6.0 调窗口监视 display 变量名
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
程序监测了sum和i 的值,每走一次就会显示一次。关闭用display ,关闭时,格式: undisplay 编号
取消sum undisplay 8
undisplay 8 9
如果只想显示一次;p 变量:打印变量值。
7.0 提前结束循环 finish
finish:执行到当前函数返回,然后停下来等待命令
8.0 continue和finish
两个断点,16行和18行
contiue 从一个函数断点跑到下一个断点或者程序执行结束
finish直接把当前所在的循环函数跑完,并得到返回值
finish vs continue
结束当前函数 直接到达下一个对应的断点
until X行号:跳至X行
打断点 查看断点 删除断点