gdb命令大全

GDB的使用

  当程序出错并产生core 时

  快速定位出错函数的办法

  gdb 程序名 core文件名(一般是core,也可能是core.xxxx)

  调试程序使用的键

  r run 运行.程序还没有运行前使用

  c cuntinue 继续运行。运行中断后继续运行

  q 退出

  kill 终止调试的程序

  h help 帮助

  <tab> 命令补全功能

  step 跟入函数

  next 不跟入函数

  b breakpoint 设置断点。

  用法:

  b 函数名 对此函数进行中断

  b 文件名:行号 对此文件中指定行中断.如果是当前文件,那么文件名与:号可以

  省略

  看当前断点数使用info break.禁止断点disable 断点号.删除delete 断点号.

  l list 列出代码行。一次列10 行。连接使用list将会滚动显示. 也可以在list 后面

  跟上 文件名:行号

  watch 观察一个变量的值。每次中断时都会显示这个变量的值

  p print 打印一个变量的值。与watch不同的是print只显示一次

  这里在顺便说说如何改变一个 value. 当你下指令 p 的时候,例如你用 p b,

  这时候你会看到 b 的 value, 也就是上面的 $1 = 15.

  你也同样可以用 p 来改变一个 value, 例如下指令 p b = 100 试试看,

  这时候你会发现, b 的 value 就变成 100 了:$1 = 100.

  网上抄录

  基本的使用方法简介

  前言

  程序代码中的错误可分为数类,除了最容易除错的语法错误,编译程序会告诉你错误所在外,大部分的错误都可以归类为执行时错误。GDB 的功能便是寻找执行时错误。如果没有除错程序,我们只能在程序中加入输出变量值的指令来了解程序执行的状态。有了 GDB 除错程序,我们可以设定在任何地方停止程序的执行,然后可以随意检视变量值及更动变量,并逐行执行程序。

  一个除错程序执行的流程通常是这样的:

  1. 进入除错程序并指定可执行文件。

  2. 指定程序代码所在目录。

  3. 设定断点后执行程序。

  4. 程序于断点中断后,可以 (1)检视程序执行状态;检视变量值或变更变量值 (2) 逐步执行程序,或是全速执行程序到下一个断点或是到程序结束为止。

  5. 离开除错程序。

  以下将分为下列数项分别介绍:

  1. 进入 GDB 及指定可执行档

  2. 指定程序代码所在目录及检视程序代码

  3. 断点的设定与清除

  4. 全速及逐步执行程序

  5. 检视及更改变量值

  6. 检视程序执行状态

  7. 读取 Core 文件信息

  进入 GDB 及指定可执行档:

  1. 进入 GDB 并读入可执行档 (档名为 'PROGRAM'),准备进行除错。

  gdb PROGRAM

  指定程序代码所在目录及检视程序代码

  1. 增加目录 DIR 到收寻程序代码的目录列表 (如果你的程序代码和可执行档放在同一个目录下,就不须指定程序代码所在目录。):

  (gdb) directory DIR

  2. 检视程序代码,格式计有:

  (gdb) list => 显示目前执行程序代码前后各五行的程序代码;或是显示从上次 list 之后的程序代码

  (gdb) list function => 显示该程序开始处前后五行的程序代码。

  (gdb) list - =>上次显示程序代码的前面的十行。

  断点的设定与清除

  1. 设定断点(指令为 break,可简写为 (b),格式计有:

  (gdb) break filename.c:30 => 在 filename.c 的第三十行处停止执行。

  (gdb) break function => 在进入 function 时中断程序的执行。

  (gdb) break filename.c:function => 在程序代码档 filename.c 中的函数 function 处设定断点。

  (gdb) break => 在下一个将被执行的命令设定断点。

  (gdb) break ... if cond => 只有当 cond 成立的时候才中断。cond 须以 C 语言的语法写成。

  2. 显示各个断点的信息。

  (gdb) info break

  3. 清除断点(命令为 clear),格式同 break 。例如 :

  (gdb) clear filename.c:30

  4. 清除断点,NUM 是在 info break 显示出来的断点编号。

  (gdb) delete NUM

  全速及逐步执行程序

  1. 从程序开头全速执行程序,直到遇到断点或是程序执行完毕为止。

  (gdb) run

  2. 在程序被中断后,全速执行程序到下一个断点或是程序结束为止 (continue 指令可简写为 c)。

  (gdb) continue

  3. 执行一行程序. 若呼叫函数, 则将该包含该函数程序代码视为一行程序 (next 指令可简写为 n)。

  (gdb) next

  4. 执行一行程序. 若呼叫函数, 则进入函数逐行执行 (step 指令可简写为 s)。

  (gdb) step

  5. 执行一行程序,若此时程序是在 for/while/do loop 循环的最后一行,则一直执行到循环结束后的第一行程序后停止 (until 指令可简写为 u)。

  (gdb) until

  6. 执行现行程序到回到上一层程序为止。

  (gdb) finish

  检视及更改变量值

  1. print 叙述,显示该叙述执行的结果 (print 指令可简写为 p)。如

  (gdb) print a => 显示 a 变量的内容.

  (gdb) print sizeof(a) => 显示 a 变量的长度.

  2. display 叙述,在每个断点或是每执行一步时显示该叙述值。如

  (gdb) display a

  3. 更改变量值:

  (gdb) print (a=10) => 将变量 a 的值设定为 10.

  检视程序执行状态

  1. 查看程序执行到此时,是经过哪些函数呼叫的程序 (backtrace 指令可简写为 bt),也就是查看函数呼叫堆栈。

  (gdb) backtrace

  读取 Core 文件信息

  1. 读入 PROGRAM 及 PROGRAM.CORE 档,可检视 Core Dump 时程序变量值及程序流程状态 。

  gdb PROGRAM core

  说明:'core' 档案是由 PROGRAM 档执行后,遇到 Core Dump 时产生的 Core 檔檔名。如果你还需要该 Core 档,我们建议你将该档案档名更改为 PROGRAM.core。在输入上述命令后,你可以用 GDB 提供的检视变量值以及检视程序执行状态来读取程序 Core Dump 时的状态。
<think>好的,我现在需要帮助用户找到GDB调试器的所有命令列表。用户明确要求GDB命令大全、列表和参考手册。首先,我要回忆一下之前提供的引用内容,看看有没有相关的信息。 根据引用[1],提到了MI接口和CLI接口命令的区别,当MI接口不够用时,可以转向CLI命令,并推荐查看GDB官方文档。引用[2]和[3]列出了一些常用命令,比如调试启动方式、断点设置等,还提到编译时需要加-g选项。引用[4]提到print命令可以计算表达式,但不能用宏。但这些引用内容可能不够全面,无法覆盖所有命令。 用户需要的是完整的命令列表,而通常GDB命令非常多,手册可能很庞大。直接列出所有命令不太现实,所以可能需要指导用户如何通过GDB内置的帮助功能或者官方文档来查找。例如,在GDB中使用help命令可以查看所有大类,再逐层深入。此外,用户可能需要知道如何获取在线手册,比如通过GNU官网或本地安装的info文档。 还要考虑用户的使用场景,可能是开发者或学生,他们需要详细的命令参考来进行调试。可能需要分门别类地列出常用命令,并提供进一步获取详细信息的途径。同时,提醒用户使用help命令和查阅官方文档,这样他们可以自行探索更多命令。 另外,用户可能不知道GDB有分类的帮助信息,比如help breakpoints查看断点相关命令。需要指出这些分类,并举例说明,比如数据查看、堆栈跟踪等。同时,引用之前提到的参考资料,比如引用[2]中的编译选项和常用命令缩写,引用[3]中的附加进程方法,引用[4]中的print命令限制,来增强回答的参考性。 最后,生成相关问题时要考虑用户可能的后续需求,比如如何学习命令、常用命令推荐、手册获取方式等。确保回答结构清晰,步骤明确,帮助用户逐步找到所需信息。</think>### GDB调试器命令列表获取方法 GDB调试器包含300+命令,完整的命令列表需通过以下方式获取: #### 一、官方权威渠道 1. **GNU官方手册** 访问GDB官方文档: https://sourceware.org/gdb/current/onlinedocs/gdb 包含所有命令的详细说明和示例(版本更新至GDB 13.2) 2. **本地文档查看** 安装GDB后执行: ```bash info gdb # 通过info系统查看 man gdb # 查看Unix手册页 ``` #### 二、GDB交互式帮助系统 在GDB命令行中: ```gdb (gdb) help [class|command] # 查看指定分类或具体命令 ``` 1. **命令分类体系**: - `help status` 查看调试状态类命令(如`info`系列) - `help running` 查看程序执行控制命令(如`run`, `continue`) - `help breakpoints` 查看断点管理命令(含条件断点、观察点等) ![GDB help层级结构示例](https://sourceware.org/gdb/current/onlinedocs/gdb/images/help-screen.png) #### 三、常用核心命令速查 | 类别 | 命令示例 | 功能说明 | 参考来源 | |------|----------|----------|----------| | 启动调试 | `gdb -p <PID>` | 附加到运行中的进程 | [^3] | | 断点管理 | `break *0x4005a6 if x>5` | 带条件的机器级断点 | [^4] | | 数据查看 | `x/10i $pc` | 反汇编当前指令附近代码 | [^2] | | 堆栈分析 | `bt full` | 带局部变量的完整栈回溯 | [^4] | | 多线程调试 | `thread apply all bt` | 获取所有线程堆栈 | [^1] | #### 四、特殊场景命令参考 1. **逆向调试**: ```gdb record full # 启动执行记录 reverse-stepi # 反向单步指令 ``` 2. **Python扩展**: ```gdb python print(gdb.selected_frame().read_register("rax")) # 通过Python API读取寄存器 ``` #### 五、推荐学习路径 1. 先掌握`start/step/next/print/backtrace`基础命令 2. 再学习`x/info/disassemble`等底层分析命令 3. 最后研究`catchpoint/tracepoint`高级功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值