太一的博客

一个程序学徒

gdb

运行程序

  • run(r) 运行程序
  • run arg1 arg2

例子程序:

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(int argc, char *argv[])
{
int i;
for (i = 0; i < argc; ++i)
{
printf("%s ", argv[i]);
}
printf("\n");
return 0;
}

image-20241003171532982

查看源码

  • list(l) - 查看最近 10 行源码
  • list fun - 查看 fun 函数源码
  • list file:fun - 查看 file 文件中的 fun 函数源码

设置断点与观察点

  • break 行号
  • break fun
  • **break file: ** 行号
  • break file:fun
  • **break if <condition> - ** 条件成立时程序停住
  • **info break(i b) - **查看断点
  • **watch expr - **一旦 expr 值发生改变,程序停住
  • delete n - 删除断点

单步调试

  • **continue(c) - ** 运行至下一个断点
  • **step(s) - ** 单步跟踪,进入函数
  • **next(n) - ** 单步跟踪,不进入函数
  • **finish - ** 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息
  • **until - ** 当厌倦了在一个函数体内单步跟踪时,这个命令可以运行程序直到退出循环体。

查看运行时数据

  • **print - **查看变量值
  • **ptype - **查看类型
  • **print array -**查看数组
  • **print *array@len -**查看动态内存
  • **print x=5 - **改变运行时数据