爷来填坑辣。

PS:本Blog仅介绍本人常用用法,如有其他请在下面补充。


GDB 是什么

一种常见调试工具。

GDB 怎么下

自行百度搜索。

GDB 的使用

最开始,请在你的编译语句后面加一个 -g

开始的开始

首先,使用 gdb A 进入gdb并打开A。

当然,下面的也可以:

gdb
file A #确保这句话在gdb中运行

下面是一些常用命令(括号中为缩写):

list(l)

列出程序源代码(默认显示共上下10行)。

  • l main 显示在 main 附近的上下共10行代码。
  • l 23 显示在第23行附近的上下共10行代码。
  • l 接着显示没显示完的代码。

break(b)

设置断点。

  • b mainmain 函数入口设置断点
  • b 712 在第712行设置断点。
  • 貌似后面还能加判断语句,但是我没用过。

clear

删除断点。

  • clear main 删除在 main 函数入口的断点
  • clear 712 在删除在第712行的断点。

run(r)

运行程序直到程序结束运行或遇到断点。

continue (c)

在程序遇到断点后继续执行,直到程序结束运行或到达下一个断点。

  • c 5 跳过5次。
  • 貌似后面还能加判断语句,但是我没用过。

next (n)

next(n):执行当前行语句,如果当前行有函数调用,则将其视为一个整体执行。

  • n 5 执行5次。
  • 貌似后面还能加判断语句,但是我没用过。

step (s)

执行当前行语句,如果当前行有函数调用,则进入该函数内部。

finish(fin)

继续执行至当前函数返回。

call

调用某个函数。

  • call f(n) 以参数 n 调用函数 f

quit(q)

退出 gdb。

print(p)

打印表达式的值。

  • p a 打印 a 的值。
  • p *s@n 打印数组 sn 位(包括第0位)的全部值。
  • p (某个STL容器) 打印容器中全部元素。

display(disp)

指定程序暂停时显示的表达式。

  • delete display a 删除编号为 a 的表达式(注意,是编号)。
  • 除删除外,同 print

附录

直接按回车会运行上次的输入。

  • 例如上次输的是 n,直接按回车会运行 n

关于 @ 这个就是显示在某个地址的后几位。

  • 例如输的是 a[1]@10 就会输出 a[1]a[10]

  • 例如输的是 *a@10 就会输出 a[0]a[9]

if 的使用就是加在 c / b 后面。

  • 例如输的是 b pushup if x==5 就会只在 x==5 的时候才在 pushup 函数停下来。

描述部分引用于OI Wiki