浅谈GDB调试在信息学竞赛中的应用
来源:互联网 发布:淘宝大学 老师 编辑:程序博客网 时间:2024/06/05 18:12
前言:如果电脑上还没有装GDB,戳这里=博客链接
这篇博客仅介绍一些常用的GDB指令
在这篇博文中,我们用一个求最大公约数的程序来做示范
准备步骤:
1.保存好程序 (这里记为1.cpp)
2.打开终端 找到1.cpp所在的文件夹 ( 代码如下)
cd desktop/OI/work //路径可自己更改
3.编译程序(代码如下)
g++ -o 1 1.cpp -g //格式为 g++ -o 文件名 文件名.cpp -g
4.打开GDB(然后会冒出来一大堆英文,当看到done就说明完成了初始化
gdb 1 // 格式为 gdb 文件名
开始调试:
下面来学习一些简单有用的指令:
运行
1.r
运行程序。 按回车后输入数据( 这里我们用 12 , 16 )
2.r < infile
r > outfile
重定向输入输出
可以代替freopen,用法与freopen差不多
2.l
查看源码(10行)
l func
显示func函数的源码
l
显示前面的代码
l -
显示前面的代码
set listsize n
设定一次打印n行
show listsize
显示一次打印的行数
3.Control+x+a 打开GDBGUI界面,更方便地调试/查看源码
当输入r后会显示源代码
断点
1.b 7
给某一行设置断点( 格式为 b 行号)
2.b gcd
给某个函数设置断点
3.info b
查询断点
4.watch a
观察点 观察变量/表达式的值
当观察的变量或表达式的值发生改变时,程序就会停止。
在使用watch时步骤如下:
1. 使用break在要观察的变量所在处设置断电;
2. 使用run执行,直到断点;
3. 使用watch设置观察点;
4. 使用continue观察设置的观察点是否有变化。
5.info watchpoints
列出所有观察点
6.b 4 if b!=0
条件断点 ( b … if ….. )
7.clear 4
删除断点 ( clear/delet 行数/函数 )
delet
用于删除所有断点
8.commands
为断点设定命令
格式:
设定断点
commands
命令
end
在每个断点都输出a,b的值
简单调试命令
1.n
单步跟踪. (遇到断点后继续执行)
2.s
单步跟踪. (函数调进入被调用函数体内)
3.f
退出函数
4.u
在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环。
5.c
继续运行程序
6.info program
来查看程序的是否在运行,进程号,被暂停的原因。
查看运行时数据
1.printf "%d", a
打印变量或表达式的值
2.p a
打印变量或表达式的值
如果要打印数组, p *array@len array为数组名, len为数组长
自动显示
1.display a
自动显示变量
2.info display
查询自动显示的变量
3.undisplay num
delet num
让自动显示失效 num为编号
4.disable display num
让自动显示失效
enable display num
让自动显示恢复
栈
1.bt
打印当前的函数调用栈的所有信息
bt-n
表示打印n层的信息
这个图表示调用顺序为 main() -> gcd( 12, 16 )
2.f
打印当前栈的信息
f n
打印第n层的栈的信息
info args
打印当前函数参数名及其值
info locals
打印当前函数所有局部变量及其值
改变程序的运行
1.print a=x
修改变量的值并打印 ( a为变量名,x为值 )
set var a=x
修改变量的值
2.whatis a
查询变量类型
3.jump n
跳转到指定行
4.return n
强制返回
return
(无返回值)
5.print gcd(10,16)
强制调用函数
cal gcd(10,16)
如果返回值是void,则不显示
参考文献:
www.cnblogs.com/lonelycatcher/archive/2011/10/09/2204865.html
www.cnblogs.com/ggjucheng/archive/2011/12/14/2288004.html#_Toc311658066
blog.csdn.net/u013982161/article/details/53150579
www.cnblogs.com/chengliangsheng/p/3597010.html
阅读全文
1 0
- 浅谈GDB调试在信息学竞赛中的应用
- 信息论在信息学竞赛中的简单应用
- 贪心策略的特点与在信息学竞赛中的应用
- 时间复杂度分析在信息学竞赛中的应用
- <<最小割模型在信息学竞赛中的应用>>的学习心得
- 《论C++语言在信息学竞赛中的应用》
- 部分贪心思想在信息学竞赛中的应用
- 最小割模型在信息学竞赛中的应用___读后的收获
- 信息学竞赛中的思维方法
- 算法之递推及其应用(递推关系的建立及在信息学竞赛中的应用 安徽 高寒蕊)
- map在竞赛中的应用
- 信息学奥林匹克竞赛-应用层协议
- 信息学竞赛
- 浅谈gdb在漏洞发掘中的使用
- 浅谈信息学竞赛中逆序对问题的求法
- 3785 What day is that day? 浅谈KMP在ACM竞赛中的暴力打表找规律中的应用
- 贪心算法在竞赛中的应用
- 贪心算法在竞赛中的应用
- axis开发的返回自定义bean
- 大白菜u盘启动盘清除系统登录密码详细教程
- 关系型数据库+NoSQL(非关系型数据库)+HBase+Hive 区别与联系
- 各位大神,这个该如何变成多客户端连接服务器,求代码
- 第四周 项目三-单链表应用 3.
- 浅谈GDB调试在信息学竞赛中的应用
- RecyclerView中嵌套RecyclerView导致自动滚动
- Spring data Repository
- 野指针和空指针
- 不同领域公开数据集下载
- 解决react-native run-ios报错问题--Print: Entry, ":CFBundleIdentifier", Does Not Exist
- 获取IP和Mac工具类
- 关于网页的多选和反选
- 以json为body发送get请求