浅谈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
原创粉丝点击