gdb
来源:互联网 发布:阿里云域名价格 编辑:程序博客网 时间:2024/05/21 14:41
1、gdb调试命令
gdb
调试环境set var修改变量的值start开始执行程序,停在main
函数第一行语句前面等待命令step(或s)执行下一行语句,如果有函数调用则进入到函数中比如还有几个命令如下
wath 观察一个变量
current 跳转到下个断点,或则跳转到观察点
quit 退出gdb调试
二、分析例子
代码如下:
在编译时要加上-g
选项,生成的可执行文件才能用gdb
进行源码级调试:
命令如下:
如下图
然后我们怎么查看源代码呢?命令如下
然后我们还要看下面的代码可以怎么样操作,你可以 回车 或则 输入l 之后回车(因为list 简写 l)注意很多gdb命令都可以简写成首字母,或则输入 list 2 回车也可以
我们退出gdb命令如下
我们这里先不退出
我们先运行程序用下面命令
如下图我们用next命令执行下一条语句,next命令简写为n,输入下民命令
我们也可是使用step命令进入函数内入跟踪,简写命令s,再输入命令n执行下一步,输入下面命令
在函数中有几种查看状态的办法,backtrace
命令(简写为bt
)可以查看函数调用的栈帧:
可见当前的add_range
函数是被main
函数调用的,main
传进来的参数是low=1, high=100
。main
函数的栈帧编号为1,add_range
的栈帧编号为0。现在可以用info
命令(简写为i
)查看add_range
函数局部变量的值:
i locals
如果想查看main
函数当前局部变量的值也可以做到,先用frame
命令(简写为f
)选择1号栈帧然后再查看局部变量:
(gdb) f 1
输入下面命令
我们还可以用p打印出当前值
我们也可以修改sum的值
比如我们不要运行这个函数了,要运行这个函数下面的程序,我们可以用finish
quit 退出命令
3、总结
我们熟悉了gdb基本的调试命令,然后下篇博客来讲gdb怎么打断点,怎么调试,怎么watch变量。
========================= 断点 ===========================
1 、安装GDB
2 、怎么打断点
1 、源文件的某一行设置断点
2、一个特定的函数设置断点
3、设置条件断点
3、举例分析
hello2.c源文件如下
比如我们在 ++b (第10行)这行和printf("c %d", i)(第18行)这两行打断点命名如下
1、编译
2、gdb调试
3、显示代码行数命令如下
3次回车4 、然后输入下面打断点命令
图片如下:
5 、 运行并且跳转到断点
1、运行
2 、跳转到断点命令(countine 简写c)
程序就到到++b 这行来,上面2个步骤也可以用这个run (简写 r)命令代码
我们这里代码会跳到这个断点里面来,我么就避免了手动循环这么多次,因为这个断点会打很多次,所以我们可以用c命令,还是会在这行,所以打断点一般不要打在循环里面,当这个代码执行完之后,我们再用c命令,就会打印18行的代码
我们也可以用watch命令来观察变量,如果变量的值发生变化,程序就会停止
我们看变量的值或则单个变量的值可以用下面命令
进入函数内部用下面命令
单步调试往下执行用下面命令
删除断点
退出gdb命令
4、如何保存断点
有时候运行时,上次打的断点没了,怎么保存呢?
1、查看断点信息并保存
2 、保存断点
断点保存在fig.dp文件里面
3、调试时候读取保存断点文件
要记住加上参数 -x
然后再去查看是否有断点
可以看到是有2个断点的
5、总结
学会了gdb打断点的基本命令,还有一些调试手段,以及断点的保存。
- GDB
- gdb
- GDB
- GDB
- gdb
- GDB
- Gdb
- GDB
- gdb
- gdb
- GDB
- GDB
- gdb
- gdb
- gdb
- GDB
- gdb~~
- gdb
- 爱奇艺优酷乐视等视频网站调用源码
- Vue.js系列之vue-router(中)(4)
- [Android]View.post(),android7.0(sdk24以上)不执行的问题(部分Click点击事件无效的原因)
- Java内存溢出
- 随手记3-js报InvalidCharacterError错
- gdb
- Binary Tree Zigzag Level Order Traversal
- Java、Python分别是解释型还是编译型语言?
- PPTP协议
- jackson实现Java对象与json的互转
- asp.net mvc4
- Memcache特性和限制
- nginx跨域的配置
- Latex 学习笔记