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 时的状态。
分享到:
相关推荐
### GDB命令大全详解 #### 一、简介 GNU Debugger(GDB)是GNU软件集合中的标准调试器,因其强大的功能和广泛的兼容性而在开发者群体中广受好评。GDB支持多种类UNIX操作系统,并能够对C、C++、Pascal及FORTRAN等...
本文档将详细介绍一系列GDB命令,帮助开发者更好地理解和掌握GDB的使用方法,提高调试效率。 #### 二、基础命令 1. **actions**: 用于配置或查看断点的动作。 2. **directory**: 设置搜索目录,例如用于查找源文件...
本文将详细解析gdb的常用调试命令,涵盖启动、运行、中断、单步执行、设置断点、监视变量、打印信息、内存操作等多个方面,旨在提供一份全面的gdb命令参考手册。 #### 二、核心命令详解 ##### 1. **帮助命令** -...
通过熟练掌握这些基本的GDB命令,开发者可以在RISC-V环境中有效地调试代码,定位和修复问题,提高软件质量。GDB的强大功能远不止于此,还有许多其他高级特性,如条件断点、数据观察点、反汇编视图等,等待开发者去...
### GDB调试常用命令详解 #### 一、GDB简介 GDB(GNU Debugger)是一款由GNU项目开发的开源调试工具,广泛应用于Unix系统及类Unix操作系统中,如Linux、BSD等。它允许用户对程序进行细致入微的调试,包括但不限于...
### GDB命令详解 #### 一、GDB简介与核心功能 GDB(GNU Debugger)是一款强大且功能全面的调试工具,主要用于Unix类操作系统(包括Linux等)中的C/C++程序调试。它允许用户控制程序的执行流程,观察并修改程序状态...
GDB 调试大全 GDB 调试入门必备 GDB 是一个功能强大的调试器,广泛应用于嵌入式系统、操作系统和应用程序的调试。下面是 GDB 调试大全的知识点总结: 一、列文件清单 * list 命令可以显示当前文件的内容,其中...
- `threadapply all command`可以让所有线程执行指定的gdb命令。 - 示例:`(gdb) threadapply all bt` - 这条命令会在所有线程中执行`bt`(backtrace)命令,打印出所有线程的堆栈跟踪信息。 5. **控制线程执行*...
GDB命令手册提供了快速参考,帮助开发者有效地追踪和解决问题。以下是GDB常用的一些核心命令及其详细解释: 1. **启动GDB** - `gdb program`:启动GDB并指定要调试的程序。 - `gdb core`:使用GDB调试一个核心...
### gdb命令手册知识点详解 #### 一、gdb简介与基本操作 **1. gdb启动** gdb(GNU调试器)是一款广泛应用于程序调试的强大工具,适用于多种编程语言,特别是C/C++。启动gdb非常简单,只需在命令行输入`gdb ...
【Linux GDB命令手册】 GDB(GNU Debugger)是一款强大的调试工具,主要用于C和C++程序,但也支持其他语言。在Linux环境下,GDB可以帮助开发者定位和修复代码中的错误,提高软件的质量。以下是对GDB命令的详细说明...
##### 4.4 使用GDB命令 GDB提供了丰富的命令集,下面列举了一些常用的命令及其用途: - **断点设置** - `break` 或 `b`: 设置断点。例如,`b main` 将在main函数入口处设置断点。 - **程序控制** - `run` 或 `r`:...
16. **`help`**:获取GDB命令的帮助信息。 17. **`set args`**:设置程序运行时的参数。 18. **`s`**:与`step`相同,执行到函数内部。 19. **`i b`**:显示所有断点的信息。 20. **`finish`**:运行到当前函数的...
以下是一些常用的GDB命令: 1. **`gdb program_name`**:启动GDB并加载指定的可执行文件。 2. **`run`**:开始执行程序,或在暂停后继续执行。 3. **`break function_name`**:在函数function_name处设置断点。 4. ...
**二、gdb命令大全** 1. **继续执行**: `continue`或`c`命令使程序从当前停止点继续执行,直到遇到下一个断点或程序结束。 2. **单步执行**: `step`或`s`命令执行下一行代码,如果下一行是函数调用,gdb会进入该...
对于初学者来说,了解并掌握GDB的基本命令是提升开发效率的关键。以下是一些GDB的常用命令及其详细说明: 1. **启动GDB** - `gdb`:启动GDB交互式环境。 - `gdb 程序名`:载入指定的可执行文件进行调试。 - `gdb...
### GDB命令参考手册 #### 一、简介 GDB(GNU Debugger)是GNU项目发布的一个强大的开源调试工具,主要用于调试C、C++等语言编写的程序。它可以帮助开发者找到程序中的错误并进行修复,从而确保软件的质量。本文将...
7. **命令和脚本**:介绍GDB的内置命令,以及如何编写自定义命令和脚本来自动化调试过程。 8. **远程调试**:指导如何在远程主机上进行调试,这对于分布式系统或者嵌入式开发尤其重要。 9. **调试多线程和进程**:...
用户可以通过在命令行中输入「gdb」命令来启动 GDB,或者通过在 IDE 中配置 GDB 来启动调试会话。 知识点 3: GDB 的调试技术 GDB 提供了多种调试技术,包括断点、单步执行、变量检查、表达式计算等。用户可以通过...
在“使用GDB开发调试大全”中,你将学习到如何启动GDB,加载目标程序,以及如何进行基本的调试操作。 1. **启动GDB与加载目标程序**:首先,你需要编译目标程序时添加调试信息,这通常通过GCC或G++的 `-g` 选项实现...