首页 > 试题广场 >

简述一下 GDB 常见的调试命令

[问答题]
简述一下 GDB 常见的调试命令
推荐

得分点

gdb 常见的调试命令

参考答案

标准回答

gdb 常见的调试命令如下:

功能 命令
启动和退出 gdb 可执行程序
quit/q
给程序设置参数/获取设置参数 set args 10 20
show args
GDB 使用帮助 help
查看当前文件代码 list/l (从默认位置显示)
list/l 行号 (从指定的行显示)
list/l 函数名(从指定的函数显示)
查看非当前文件代码 list/l 文件名:行号
list/l 文件名:函数名
设置显示的行数 show list/listsize
set list/listsize 行数
设置断点 b/break 行号
b/break 函数名
b/break 文件名:行号
b/break 文件名:函数
查看断点 i/info b/break
删除断点 d/del/delete 断点编号
设置断点无效 dis/disable 断点编号
设置断点生效 ena/enable 断点编号
设置条件断点(一般用在循环的位置) b/break 10 if i==5
运行GDB程序 start(程序停在第一行)
run(遇到断点才停)
继续运行,到下一个断点停 c/continue
向下执行一行代码(不会进入函数体) n/next
变量操作 p/print 变量名(打印变量值)
ptype 变量名(打印变量类型)
向下单步调试(遇到函数进入函数体) s/step
finish(跳出函数体)
自动变量操作 display 变量名(自动打印指定变量的值)
i/info display
undisplay 编号
查看 follow-fork-mode mode 选项的值 show follow-fork-mode
查看 detach-on-fork 选项的值 show detach-on-fork
设置 follow-fork-mode mode 选项的值 set follow-fork-mode [parent | child]
设置 detach-on-fork 选项的值 show detach-on-fork [on | off]
查看当前调试环境中有多少个进程 info inferiors
切换到指定 ID 编号的进程对其进行调试 inferior id
其它操作 set var 变量名=变量值 (循环中用的较多)
until (跳出循环)

延伸阅读

  1. GDB 是由 GNU 软件系统社区提供的调试工具,同 GCC 配套组成了一套完整的开发环境,GDB 是 Linux 和许多类 Unix 系统中的标准开发环境。

  2. 一般来说,GDB 主要帮助你完成下面四个方面的功能:

    • 启动程序,可以按照自定义的要求随心所欲的运行程序
    • 可让被调试的程序在所指定的调置的断点处停住(断点可以是条件表达式)
    • 当程序被停住时,可以检查此时程序中所发生的事
    • 可以改变程序,将一个 BUG 产生的影响修正从而测试其他 BUG
  3. 通常,在为调试而编译时,我们会关掉编译器的优化选项(-O), 并打开调试选项(-g)。另外,-Wall在尽量不影响程序行为的情况下选项打开所有 warning,也可以发现许多问题,避免一些不必要的 BUG。

    gcc -g -Wall program.c -o program
  4. -g 选项的作用是在可执行文件中加入源代码的信息,比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调试时必须保证 gdb 能找到源文件。

编辑于 2021-09-15 14:06:38 回复(0)
c++工程师不会这个也很正常吧,应届生
发表于 2022-07-02 16:05:16 回复(0)
我选的是java工程师啊😥
发表于 2022-03-20 14:40:36 回复(1)
测试啊,咋出这个题呢
发表于 2022-04-06 11:01:46 回复(0)
别说测试了,前端开发都出这题
发表于 2022-04-28 19:58:11 回复(0)
常用命令
(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h
(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r
(gdb)start:单步执行,运行程序,停在第一执行语句
(gdb)list:查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l
(gdb)set:设置变量的值
(gdb)next:单步调试(逐过程,函数直接执行),简写n
(gdb)step:单步调试(逐语句:跳入自定义函数内部执行),简写s
(gdb)backtrace:查看函数的调用的栈帧和层级关系,简写bt
(gdb)frame:切换函数的栈帧,简写f
(gdb)info:查看函数内部局部变量的数值,简写i
(gdb)finish:结束当前函数,返回到函数调用点
(gdb)continue:继续运行,简写c
(gdb)print:打印值及地址,简写p
(gdb)quit:退出gdb,简写q
(gdb)break+num:在第num行设置断点,简写b
(gdb)info breakpoints:查看当前设置的所有断点
(gdb)delete breakpoints num:删除第num个断点,简写d
(gdb)display:追踪查看具体变量值
(gdb)undisplay:取消追踪观察变量
(gdb)watch:被设置观察点的变量发生修改时,打印显示
(gdb)i watch:显示观察点
(gdb)enable breakpoints:启用断点
(gdb)disable breakpoints:禁用断点
(gdb)x:查看内存x/20xw 显示20个单元,16进制,4字节每单元
(gdb)run argv[1] argv[2]:调试时命令行传参
(gdb)set follow-fork-mode child#Makefile项目管理:选择跟踪父子进程(fork())

发表于 2021-11-11 18:59:49 回复(0)
GDB是在linux/unix操作系统下的命令行窗口
发表于 2021-10-27 20:48:19 回复(0)
算法为啥也出这道题

发表于 2025-12-13 20:37:32 回复(0)
计算机是一家了
发表于 2023-09-17 19:26:51 回复(0)
常用操作:
help + 命令:查看命令使用文档
run:重新执行文件,run+text加载文本文档 run+bin加载二进制文件
start:逐行执行文件
list:查看源文件 list -n从第n行开始看,list+函数名:查看函数
发表于 2023-08-05 16:46:55 回复(0)
为什么前端会出这题
发表于 2022-05-12 11:00:20 回复(0)
(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h
(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r
(gdb)start:单步执行,运行程序,停在第一执行语句
(gdb)list:查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l
发表于 2022-04-11 08:28:05 回复(0)