gdb单步调试(中)
GDB调试简易教程
设置断点(break point)
`break ... if COND` 条件断点,当表达式COND非零时程序在断 点停止 例如`break 253 if i=10` `tbreak …` 设置一个只会停止一次的断点
设置观察点(watch point)
`watch EXPR` 为EXPR设置一个观察点,一旦EXPR被写入并发生变化,程 序停止 `rwatch EXPR` EXPR被读取时,程序停止 `awatch EXPR` EXPR被读取或者被写入时,程序停止 当程序运行到EXPR作用域以外的地方时,GDB将会自动删 除此观察点,如果想继续观察,必须重新设置观察点。
启动:
最通常的命令就是使用一个参数: $(m68k-linux-)gdb <可执行文档名> 你还可以同时为你的执行文件指定一个core文件: $gdb <可执行文件名> core 你也可以为你要执行的文件指定一个进程号:
$gdb <可执行文件名> <进程号>
常用启动参数:
-symbols <文件名>(-s <文件名>) 从<文件名>中读去符号 -x <文件名> 执行gdb命令,在<文件名>指定的文件中存放着一序列的gdb 命令,就象一个批处理 -directory(-d) <路径> 指定路径。把<路径>加入到搜索源文件的路径中
程序的恢复与单步调试
finish 运行程序,直到当前函数完成并返回,打印函数返回时的堆 栈地址和返回值及参数值等信息 until [location] 简写为u,继续运行程序直至跳出当前正在单步调试的循环体; 加参数表示继续运行到代码的location处或者当前stack frame返回
gdb调试汇编语言
gdb调试汇编语言
GDB是一个功能强大的调试器,可以用来调试汇编语言程序。
在使用GDB调试汇编语言程序时,你需要首先确保程序已经被编译成可执行文件,并且包含了调试信息。
接下来,你可以通过以下步骤使用GDB来调试汇编语言程序:
1. 启动GDB,在命令行中输入`gdb`命令,然后在GDB提示符下输入可执行文件的名称。
2. 设置断点,你可以使用`break`命令在程序中设置断点,以便在特定的位置停止程序的执行。
例如,你可以输入`break main`来在程序的主函数处设置断点。
3. 运行程序,输入`run`命令来运行程序,程序会在设置的断点处停止执行。
4. 单步执行,使用`stepi`命令来逐条执行汇编指令,这样你可以逐步跟踪程序的执行过程。
5. 查看寄存器和内存,使用`info registers`命令可以查看寄
存器的值,而使用`x`命令可以查看内存中特定地址的内容。
6. 检查堆栈,使用`backtrace`命令可以查看当前的函数调用堆栈,而使用`frame`命令可以切换到不同的堆栈帧。
7. 观察变量,使用`print`命令可以查看特定变量的值,这对于检查程序状态非常有用。
8. 继续执行,当你想让程序继续执行时,可以使用`continue`命令来让程序一直执行到下一个断点或者程序结束。
以上是使用GDB调试汇编语言程序的基本步骤,当然,在实际调试过程中可能会有更复杂的情况需要处理,但是掌握了这些基本操作之后,你就可以更有效地使用GDB来调试汇编语言程序了。
希望这些信息对你有所帮助。
gdb 使用方法
gdb 使用方法GDB是GNUDebugger的缩写,是一种强大的调试工具,可以用于C、C++、汇编等语言的程序调试。
在本文中,我们将介绍 GDB 的一些基本使用方法。
1. 编译程序在使用 GDB 调试程序之前,首先需要编译程序,以便在调试时能够获取程序的符号表信息。
在编译时,需要使用 -g 选项生成调试信息。
例如:```shell$ gcc -g -o my_program my_program.c```2. 启动 GDB启动 GDB 的方法很简单,只需要在命令行中输入 gdb 命令,后跟要调试的程序的名称。
例如:```shell$ gdb my_program```3. 设置断点在程序中设置断点可以帮助我们在程序执行到特定位置时停下来,方便我们进行调试。
在 GDB 中,可以使用 break 命令设置断点。
例如:```shell(gdb) break main```上面的命令会在程序执行到 main 函数时设置一个断点。
4. 运行程序在设置好断点之后,可以使用 run 命令运行程序。
例如:```shell(gdb) run```5. 调试程序程序运行过程中,可以使用 GDB 提供的一些命令进行调试。
例如:- step:单步执行程序,进入函数内部。
- next:单步执行程序,不进入函数内部。
- print:打印变量的值。
- watch:监视一个变量,当变量的值发生变化时停下来。
- continue:继续执行程序直到遇到下一个断点或程序结束。
6. 查看程序状态在调试程序时,可以使用 GDB 提供的一些命令查看程序的状态。
例如:- info breakpoints:查看当前设置的断点。
- info locals:查看当前函数的局部变量。
- info registers:查看当前 CPU 寄存器的值。
- info threads:查看当前程序中的线程信息。
7. 退出 GDB在调试完成后,可以使用 quit 命令退出 GDB。
gdb使用教程
gdb使用教程GDB是GNU调试器的缩写,是一个功能强大的命令行调试工具,用于帮助开发人员在调试过程中定位和修复程序中的错误。
以下是GDB的使用教程:1. 编译程序时添加调试信息:在使用GDB进行调试之前,需要确保程序在编译时包含了调试信息。
可以通过在编译命令中添加`-g`选项来实现。
例如:`gcc -g main.c -o main`。
2. 启动GDB:在命令行中输入`gdb`命令,然后输入可执行文件的路径作为参数。
例如:`gdb ./main`。
3. 设置断点:断点是在程序执行到指定位置时停下来的标记。
可以使用`break`命令来设置断点。
例如:`break main`可以在`main`函数的开头设置一个断点。
4. 开始执行程序:使用`run`命令来运行程序。
例如:`run`。
5. 执行程序并停在断点处:当程序开始运行后,会在达到断点处停下来等待输入。
此时可以使用一些GDB命令来检查程序的状态,如查看变量的值、栈帧等。
6. 单步执行:使用`next`命令来逐行执行程序。
例如:`next`。
7. 跳出函数:使用`finish`命令可以跳出当前正在执行的函数,并停在调用该函数的上一个函数中。
8. 继续执行:使用`continue`命令可以接着执行程序直到下一个断点或程序结束。
9. 查看变量的值:使用`print`或简写的`p`命令可以查看变量的值。
例如:`print i`可以查看变量`i`的值。
10. 修改变量的值:使用`set`命令可以修改变量的值。
例如:`set i = 10`可以将变量`i`的值修改为10。
11. 查看函数调用栈:使用`backtrace`或简写的`bt`命令可以查看函数调用栈。
12. 退出GDB:使用`quit`命令可以退出GDB。
以上是一些常用的GDB命令,使用GDB进行调试时还有很多其他的功能和命令可以使用,可以通过阅读GDB的文档来更详细地了解。
gdb调试命令的使用及总结
gdb调试命令的使用及总结GDB是GNU调试器的简称,是一个非常强大的调试工具,可用于调试C、C++等编程语言的程序。
通过GDB,开发人员可以在程序运行过程中查看变量的值、跟踪函数的执行、定位错误的原因等。
下面将介绍一些常用的GDB调试命令及其使用方法。
1. 启动GDB调试器:在命令行中输入"gdb"命令即可启动GDB调试器。
然后使用"gdb <可执行文件名>"命令加载要调试的可执行文件。
2. 设置断点:使用"break <行号>"命令在指定行号上设置断点。
可以使用"break <函数名>"命令在指定函数的入口处设置断点。
使用"info breakpoints"命令可以查看当前设置的断点。
3. 运行程序:使用"run"命令运行程序。
如果程序需要输入参数,则可以使用"run <参数1> <参数2> ..."的形式运行。
4. 单步执行:在断点处停下来后,可以使用"next"命令执行下一行代码。
使用"step"命令进入函数内部执行。
使用"finish"命令执行完当前函数并返回上一层调用。
5. 查看变量值:使用"print <变量名>"命令可以查看指定变量的值。
使用"display <变量名>"命令可以设置自动显示变量值。
6. 查看堆栈信息:使用"backtrace"命令可以查看函数调用的堆栈信息。
使用"frame <帧号>"命令可以切换到指定的堆栈帧。
7. 修改变量值:使用"set <变量名>=<新值>"命令可以修改指定变量的值。
(2021年整理)GDB调试命令手册.
(完整版)GDB调试命令手册.编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整版)GDB调试命令手册.)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整版)GDB调试命令手册.的全部内容。
(完整版)GDB调试命令手册.编辑整理:张嬗雒老师尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布到文库,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是我们任然希望 (完整版)GDB调试命令手册。
这篇文档能够给您的工作和学习带来便利。
同时我们也真诚的希望收到您的建议和反馈到下面的留言区,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请下载收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为〈(完整版)GDB调试命令手册。
> 这篇文档的全部内容。
常用的 gdb 命令backtrace 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where breakpoint 在程序中设置一个断点cd 改变当前工作目录clear 删除刚才停止处的断点commands 命中断点时,列出将要执行的命令continue 从断点开始继续执行delete 删除一个断点或监测点;也可与其他命令一起使用display 程序停止时显示变量和表达时down 下移栈帧,使得另一个函数成为当前函数frame 选择下一条 continue 命令的帧info 显示与该程序有关的各种信息jump 在源程序中的另一点开始运行kill 异常终止在 gdb 控制下运行的程序list 列出相应于正在执行的程序的原文件内容next 执行下一个源程序行,从而执行其整体中的一个函数print 显示变量或表达式的值pwd 显示当前工作目录pype 显示一个数据结构 (如一个结构或 C++类的内容quit 退出 gdbreverse-search 在源文件中反向搜索正规表达式run 执行该程序search 在源文件中搜索正规表达式set variable 给变量赋值signal 将一个信号发送到正在运行的进程step 执行下一个源程序行,必要时进入下一个函数undisplay display 命令的反命令,不要显示表达式until 结束当前循环up 上移栈帧,使另一函数成为当前函数watch 在程序中设置一个监测点(即数据断点whatis 显示变量或函数类型GDB 命令分类详解一:列文件清单。
GDB调试命令手册
常用的gdb命令backtrace 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where)breakpoint 在程序中设置一个断点cd 改变当前工作目录clear 删除刚才停止处的断点commands 命中断点时,列出将要执行的命令continue 从断点开始继续执行delete 删除一个断点或监测点;也可与其他命令一起使用display 程序停止时显示变量和表达时down 下移栈帧,使得另一个函数成为当前函数frame 选择下一条continue命令的帧info 显示与该程序有关的各种信息jump 在源程序中的另一点开始运行kill 异常终止在gdb 控制下运行的程序list 列出相应于正在执行的程序的原文件内容next 执行下一个源程序行,从而执行其整体中的一个函数print 显示变量或表达式的值pwd 显示当前工作目录pype 显示一个数据结构(如一个结构或C++类)的内容quit 退出gdbreverse-search 在源文件中反向搜索正规表达式run 执行该程序search 在源文件中搜索正规表达式set variable 给变量赋值signal 将一个信号发送到正在运行的进程step 执行下一个源程序行,必要时进入下一个函数undisplay display命令的反命令,不要显示表达式until 结束当前循环up 上移栈帧,使另一函数成为当前函数watch 在程序中设置一个监测点(即数据断点)whatis 显示变量或函数类型GDB命令分类详解一:列文件清单 (2)二:执行程序 (2)三:显示数据 (2)四:断点(breakpoint) (3)五.断点的管理 (3)六.变量的检查和赋值 (4)七.单步执行 (4)八.函数的调用 (4)九.机器语言工具 (4)十.信号 (4)十一.原文件的搜索 (5)十二. UNIX接口 (5)十三. 命令的历史 (5)十四. GDB帮助 (5)十五. GDB多线程 (6)十六. GDB使用范例 (7)一:列文件清单1.List(gdb) list line1,line2二:执行程序要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。
gdb 调试原理
gdb 调试原理GDB(GNU Debugger)是一个强大的Unix/Linux下的源代码调试工具。
它允许开发者在程序运行时检查其内部状态,例如变量的值、堆栈跟踪、内存内容等。
GDB通过以下原理进行调试:1. **断点(Breakpoints)**:断点是GDB中一个重要的概念,它允许程序在特定点暂停执行。
开发者可以在代码的关键部分设置断点,当程序运行到这些点时,GDB会自动暂停,允许开发者检查程序状态。
2. **监视点(Watchpoints)**:除了断点,GDB还允许设置监视点。
监视点会监视变量的值变化,当变量的值发生变化时,GDB会暂停程序。
这对于观察程序中某些变量的动态变化非常有用。
3. **单步执行(Single-stepping)**:GDB允许开发者逐行或逐指令执行程序。
这样可以在每一步查看程序的执行情况和变量状态,帮助开发者找出程序的错误位置。
4. **查看堆栈跟踪(Stack Traces)**:当程序出现错误或异常时,GDB可以显示当前的堆栈跟踪,即函数调用序列。
这有助于确定错误发生的上下文和位置。
5. **表达式求值(Expression Evaluation)**:在GDB中,开发者可以求值任何C/C++表达式,并查看结果。
这对于检查变量、调用函数或进行其他动态分析非常有用。
6. **源码和汇编混合调试**:GDB允许开发者在源代码和汇编代码之间自由切换,以便从不同角度理解程序的执行过程。
7. **线程调试**:对于多线程程序,GDB提供了线程相关的调试功能,例如选择特定的线程进行调试、查看线程的状态等。
8. **环境变量和命令行参数**:GDB允许开发者设置环境变量和命令行参数,这可以用来改变程序的运行环境或设置特定的调试参数。
GDB的工作原理是基于“调试器协议”的,这个协议定义了GDB和目标程序之间的通信方式。
当GDB与目标程序连接后,它发送各种命令给目标程序,目标程序响应这些命令并返回结果给GDB。
linux系统调试工具GDB 命令详细解释..
Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。
和所有常用的调试工具一样,gdb提供了以下功能:# 监视程序中变量的值# 在程序中设置断点# 程序的单步执行在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就需要用-g参数来打开程序的调试选项。
调试开始时,必须先载入要进行调试的程序,可以用以下两种方式:* 在启动gdb后执行以下命令:file 可执行文件路径* 在gdb启动时就载入程序:gdb 可执行文件路径载入程序后,接下来就是要进行断点的设置,要监视的变量的添加等工作,下面对在这个过程中常会用到的命令逐一进行介绍:* list:显示程序中的代码,常用使用格式有:list输出从上次调用list命令开始往后的10行程序代码。
list -输出从上次调用list命令开始往前的10行程序代码。
list n输出第n行附近的10行程序代码。
list function输出函数function前后的10行程序代码。
* forward/search:从当前行向后查找匹配某个字符串的程序行。
使用格式:forward/search 字符串查找到的行号将保存在$_变量中,可以用print $_命令来查看。
* reverse-search:和forward/search相反,向前查找字符串。
使用格式同上。
* break:在程序中设置断点,当程序运行到指定行上时,会暂停执行。
使用格式:break 要设置断点的行号* tbreak:设置临时断点,在设置之后只起作用一次。
使用格式:tbreak 要设置临时断点的行号* clear:和break相反,clear用于清除断点。
使用格式:clear 要清除的断点所在的行号* run:启动程序,在run后面带上参数可以传递给正在调试的程序。
gdb编译和调试命令
编译和调试是软件开发过程中的重要步骤,尤其是在使用GDB (GNU调试器)时。
以下是一些基本的GDB编译和调试命令:1.编译:2.1.使用gcc编译器进行编译。
例如,如果你有一个名为main.c的源文件,你可以使用以下命令进行编译:复制代码`gcc -g main.c -o main`1.-g选项告诉编译器生成调试信息。
3.启动GDB并加载程序:4.1.使用GDB启动程序:复制代码`gdb ./main`5.设置断点:6.1.在函数或代码行上设置断点,以便在程序执行到该点时停止:复制代码css`break main.c:10`7.运行程序:8.1.使用run命令启动程序:复制代码`run`9.查看变量值:10.1.在程序暂停时,使用print命令查看变量的值:复制代码`print variable_name`11.步进:12.1.执行下一行代码:复制代码css`next`或`n`1.进入函数或子例程:复制代码css`step`或`s`13.跳过函数:14.1.跳过当前函数并执行下一行代码:复制代码css`finish`或`f`15.继续执行直到下一个断点:16.1.使用continue或c命令。
如果你想在到达断点之前停止程序,可以使用until命令。
17.查看调用栈:18.•使用where或简写的w命令查看调用栈。
这显示了当前位置的函数调用序列。
1.退出GDB:使用quit命令退出GDB。
也可以使用简写形式q。
2.查看源代码:在GDB中,可以使用list命令(简写为l)查看当前行的前后代码。
也可以使用文件名和行号来查看特定代码的上下文。
例如,要查看main.c文件的第10行代码,可以使用以下命令:kotlin复制代码list main.c:10。
gdb 中set用法 -回复
gdb 中set用法-回复gdb 是一个功能强大的调试器,可以帮助程序员在开发和调试过程中定位和修复bug。
其中,set 命令是gdb 的一个重要功能,用于设置和修改调试环境的参数。
本文将一步一步详细介绍set 命令的用法和功能,帮助读者更好地理解和使用。
1. set 的基本语法gdb 中的set 命令的基本语法为:set parameter value。
其中,parameter 是要设置或修改的参数,value 是设置的值。
set 命令可以用于调整很多不同的参数,例如调试器显示的信息、断点设置、寄存器的值等。
2. set 命令的分类根据设置的参数类型,set 命令可以分为三类:显示设置、执行设置和运行时设置。
下面将分别介绍这三类set 命令的具体用法和示例。
2.1 显示设置显示设置用于改变调试器的一些显示行为和信息显示方式。
常用的参数有:- pagination:控制调试信息的分页显示,默认值为on。
可以使用set pagination off 关闭分页显示,以便在显示结果中查看完整的信息。
- print array:设置在打印数组时显示的元素数量。
例如,set print array 100 将设置打印数组时显示的元素数量为100。
- print elements:设置在打印集合或容器时显示的元素数量。
例如,set print elements 50 将设置打印集合时显示的元素数量为50。
2.2 执行设置执行设置用于改变调试器的执行行为和命令执行方式。
常用的参数有:- step-mode:控制单步步进的方式。
默认值为on,表示以指令为单位进行单步调试。
可以使用set step-mode off 切换为行为单位的单步调试方式。
- step-in-statement:控制是否单步进入复合语句中。
默认值为on,表示单步执行时会进入复合语句中。
可以使用set step-in-statement off 关闭单步进入复合语句。
常用GDB调试方法
常用GDB调试方法GDB(GNU调试器)是一个命令行调试工具,用于在开发和调试过程中定位和修复程序中的错误。
它具有丰富的功能,如设置断点、单步执行、查看变量和内存、跟踪程序执行流等。
下面是一些常用的GDB调试方法。
1.启动程序调试:要在GDB中调试一个程序,需要先启动GDB并加载要调试的可执行文件。
在命令行中输入“gdb [executable]”来启动GDB,并将可执行文件作为参数传递给它。
2.设置断点:断点是程序执行过程中的一个停止点,用于跟踪程序执行流和查看变量的值。
使用“break [line number]”命令在指定行上设置断点。
例如,“break main”将在程序的主函数上设置一个断点。
3.启动程序:在GDB中使用“run”命令来启动程序的执行。
程序将在遇到断点或程序结束时停止。
4.单步执行:使用“step”命令可以按照程序的执行流,在函数调用之间进行单步执行。
这将进入函数并执行函数内部的代码。
5.继续执行:使用“continue”命令可以让程序继续执行,直到遇到下一个断点或程序结束。
6.查看变量:使用“print [variable]”命令可以查看变量的值。
也可以使用“display [variable]”命令在每次停止时自动显示变量的值。
7.修改变量的值:使用“set [variable]=[value]”命令可以修改变量的值。
这在调试过程中有时很有用。
8.查看函数调用栈:使用“backtrace”命令可以查看函数调用栈。
这将显示当前函数和调用它的函数。
9.查看堆栈帧:使用“frame [n]”命令可以查看调用栈中的特定堆栈帧。
这将显示该堆栈帧中的函数和局部变量。
10.观察程序的执行流:使用“next”命令可以按照程序的执行流在语句之间执行。
这不会进入函数调用。
11.跟踪程序的执行流:使用“trace”命令可以跟踪程序的执行流。
这将显示程序执行的每一步。
12.设置条件断点:使用“break [line number] if [condition]”命令可以在满足特定条件时设置断点。
gdb调试命令的使用及总结
gdb调试命令的使用及总结gdb是一种功能强大的调试工具,用于帮助开发人员诊断和解决程序中的错误。
通过使用gdb,开发人员可以检查程序的内部状态、变量的值以及程序的执行流程,从而更好地理解程序的行为并找到问题所在。
在使用gdb进行调试时,有一些常用的命令可以帮助我们进行调试。
下面是一些常用的gdb调试命令及其使用方法的总结。
1. 启动程序:可以使用gdb命令后跟可执行程序的路径来启动程序。
例如:gdb ./program。
2. 设置断点:可以使用break命令来设置断点。
例如:break main 可以在程序的main函数处设置断点。
3. 运行程序:可以使用run命令来运行程序。
例如:run可以开始执行程序。
4. 单步执行:可以使用step命令来逐行执行程序。
例如:step可以执行当前行并进入函数。
5. 继续执行:可以使用continue命令来继续执行程序。
例如:continue可以继续执行程序直到下一个断点。
6. 打印变量的值:可以使用print命令来打印变量的值。
例如:print variable可以打印变量的值。
7. 查看函数调用栈:可以使用backtrace命令来查看函数调用栈。
例如:backtrace可以显示当前函数的调用栈。
8. 修改变量的值:可以使用set命令来修改变量的值。
例如:set variable = value可以修改变量的值。
9. 查看内存内容:可以使用x命令来查看内存的内容。
例如:x /nfu address可以以指定格式查看指定地址的内存内容。
10. 查看寄存器的值:可以使用info registers命令来查看寄存器的值。
例如:info registers可以显示当前寄存器的值。
11. 跟踪程序执行时间:可以使用set pagination off命令来关闭分页显示功能。
例如:set pagination off可以关闭分页显示。
总结:gdb是一种强大的调试工具,可以帮助开发人员定位和解决程序中的错误。
gdb跟踪调试程序的方法
gdb跟踪调试程序的方法嘿,朋友们!今天咱来聊聊 gdb 跟踪调试程序的那些事儿。
这就好比你在一个神秘的代码世界里探险,而 gdb 就是你手中的神奇魔杖!首先呢,你得把 gdb 这个小工具准备好。
就像战士上战场得有趁手的兵器一样,gdb 就是咱程序员的得力助手。
然后,当你要调试一个程序的时候,就像打开一扇通往奇妙世界的大门。
你可以用 gdb 去加载这个程序,这感觉就像是你进入了一个满是代码宝藏的洞穴。
在这个过程中,你可以设置断点。
哎呀呀,这断点可太重要啦!就好比你在代码的道路上放置了一个个小标记,当程序运行到这里的时候,就会停下来,等你去查看。
这多方便呀,就像你在路上走,突然看到一个有趣的地方,就停下来好好瞧瞧。
还有哦,你可以查看变量的值。
这就像你在这个代码世界里,能清楚地看到每个宝藏的具体模样。
你可以知道这个变量现在是什么状态,是不是符合你的预期。
当程序暂停在断点处时,你可以一步步地执行代码。
这感觉就像是你小心翼翼地在代码的小道上往前走,每一步都看得清清楚楚。
你可以看到每一行代码是怎么影响程序的运行的。
你想想,这多神奇呀!就好像你能掌控整个代码的运行过程,让它按照你的意愿来走。
如果程序出了问题,你就能像侦探一样,通过 gdb 找到问题的根源。
比如说,程序突然崩溃了,别着急,用 gdb 来跟踪呀!看看是在哪一行代码出了岔子,是哪个变量的值变得不对劲了。
这不就像是在黑暗中找到了那一丝光亮吗?而且哦,gdb 还能帮你查看函数的调用栈。
这就像是你能看到整个程序的运行轨迹,从一个函数跳到另一个函数,就像在一个复杂的迷宫中找到正确的路径。
总之呢,gdb 跟踪调试程序就像是一场刺激的冒险。
你要勇敢地面对代码世界里的各种挑战,利用好 gdb 这个神奇的工具。
所以呀,朋友们,别害怕遇到程序中的问题,拿起 gdb 这个法宝,大胆地去探索吧!让我们在代码的海洋里畅游,找到那些隐藏的宝藏,解决那些看似棘手的问题。
相信我,一旦你掌握了 gdb 跟踪调试程序的方法,你就会发现编程变得更加有趣,更加有成就感啦!。
GDB使用手册
GDB使用手册《GDB 使用手册详解》一、引言(一)GDB 的简介(二)GDB 的主要功能(三)使用 GDB 的好处二、安装与配置 GDB (一)GDB 的安装方法(二)配置 GDB 的环境变量(三)启动 GDB三、GDB 的基本命令(一)设置断点(二)查看变量(三)单步调试(四)继续执行(五)查看调用栈(六)修改变量的值四、调试多线程程序(一)查看线程信息(二)切换线程(三)设置线程断点(四)处理线程竞争五、调试内存问题(一)检查内存泄漏(二)查看内存布局(三)分析内存访问错误六、调试核心转储文件(一)生成核心转储文件(二)使用 GDB 分析核心转储文件(三)查找导致崩溃的原因七、GDB 的高级功能(一)条件断点(二)监视点(三)远程调试(四)脚本化调试八、GDB 与其他工具的集成(一)与编译器集成(二)与版本控制系统集成(三)与调试器前端集成九、实际案例分析(一)使用 GDB 调试一个简单的程序(二)调试一个多线程程序(三)调试一个内存泄漏问题(四)调试一个核心转储文件十、GDB 的常见问题与解决方法(一)无法启动 GDB(二)断点不起作用(三)调试信息不完整(四)其他常见问题十一、GDB 的最佳实践(一)合理使用断点(二)注意调试的效率(三)结合其他工具进行调试(四)及时清理调试环境十二、GDB 的未来发展(一)GDB 的发展趋势(二)对开发者的影响十三、附录(一)GDB 的命令参考(二)相关资源链接(三)常见问题解答以上是根据 GDB 使用手册编写的文章大纲,你可以根据实际情况进行具体内容的填充和扩展,确保文章不少于 2500 字。
gdb调试命令
gdb调试命令 gdb是⼀个在UNIX环境下的命令⾏调试⼯具。
如果需要使⽤gdb调试程序,请在gcc时加上-g选项。
下⾯的命令部分是简化版,⽐如使⽤l代替list等等。
1.基本命令1)进⼊GDB #gdb test test是要调试的程序,由gcc test.c -g -o test⽣成。
进⼊后提⽰符变为(gdb) 。
2)查看源码 (gdb) l 源码会进⾏⾏号提⽰。
如果需要查看在其他⽂件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码。
或者:使⽤断点或单步运⾏,到某个函数处使⽤s进⼊这个函数。
3)设置断点 (gdb) b 6 这样会在运⾏到源码第6⾏时停⽌,可以查看变量的值、堆栈情况等;这个⾏号是gdb的⾏号。
4)查看断点处情况 (gdb) info b 可以键⼊"info b"来查看断点处情况,可以设置多个断点;5)运⾏代码 (gdb) r6)显⽰变量值 (gdb) p n 在程序暂停时,键⼊"p 变量名"(print)即可; GDB在显⽰变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引⽤标记,以后若想再次引⽤此变量,就可以直接写作"$N",⽽⽆需写冗长的变量名;7)观察变量 (gdb) watch n在某⼀循环处,往往希望能够观察⼀个变量的变化情况,这时就可以键⼊命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;8)单步运⾏ (gdb) n9)程序继续运⾏ (gdb) c 使程序继续往下运⾏,直到再次遇到断点或程序结束;10)退出GDB (gdb) q2.断点调试命令格式 例⼦ 作⽤break + 设置断点的⾏号 break n 在n⾏处设置断点tbreak + ⾏号或函数名 tbreak n/func 设置临时断点,到达后被⾃动删除break + filename + ⾏号 break main.c:10 ⽤于在指定⽂件对应⾏设置断点break + <0x...> break 0x3400a ⽤于在内存某⼀位置处暂停break + ⾏号 + if + 条件 break 10 if i==3 ⽤于设置条件断点,在循环中使⽤⾮常⽅便info breakpoints/watchpoints [n] info break n表⽰断点号,查看断点/观察点的情况clear + 要清除的断点⾏号 clear 10 ⽤于清除对应⾏的断点,要给出断点的⾏号,清除时GDB会给出提⽰delete + 要清除的断点编号 delete 3 ⽤于清除断点和⾃动显⽰的表达式的命令,要给出断点的编号,清除时GDB不会给出任何提⽰disable/enable + 断点编号 disable 3 让所设断点暂时失效/使能,如果要让多个编号处的断点失效/使能,可将编号之间⽤空格隔开awatch/watch + 变量 awatch/watch i 设置⼀个观察点,当变量被读出或写⼊时程序被暂停rwatch + 变量 rwatch i 设置⼀个观察点,当变量被读出时,程序被暂停catch 设置捕捉点来补捉程序运⾏时的⼀些事件。
最新GDB 单步调试
G D B单步调试GDB 单步调试1、首先需要用gcc(g++)对源文件进行编译生成可执行文件,并且在编译时加上选项-g,把调试信息加到目标文件中。
2、假设生成的可执行文件为test,那么gdb test可以用gdb打开test 文件,然后通过break linenum设置断点。
可以输入list查看源文件和行号,方便设置断点。
断点设置好后就可以run命令运行到断点处了。
下面是转载一、初始化输入gdb进入gdb调试环境。
或者直接输入gdb+progfile来加载文件。
注意该文件是使用gcc(或g++)编译得到的。
为了使gdb正常工作,必须使你的程序在编译时包含调试信息,编译时必须使用-g参数来。
或者进入gdb环境后,通过命令file+progfile来加载需要调试的可执行文件文件。
查看源代码:list[函数名][行数]设置程序运行参数:set args二、暂停程序gdb可以使用几种方式来暂停程序:断点,观察点,捕捉点,信号,线程停止。
当程序被暂停后,可以使用continue、next、step来继续执行程序。
continue执行到下一暂停点或程序结束。
next执行一行源代码但不进入函数内部。
step执行一行源代码而且进入函数内部。
1、设置断点:a、break+[源代码行号][源代码函数名][内存地址]b、break.if condition.可以是上述任一参数,condition条件。
例如在循环体中可以设置break.if i=100来设置循环次数。
2、设置观察点:a、watch+[变量][表达式]当变量或表达式值改变时即停住程序。
b、rwatch+[变量][表达式]当变量或表达式被读时,停住程序。
c、awatch+[变量][表达式]当变量或表达式被读或被写时,停住程序。
3、设置捕捉点:catch+event当event发生时,停住程序。
event可以是下面的内容:1)、throw一个C++抛出的异常。
gdb gef常用命令
gdb gef常用命令以下是GDB中常用的gef插件命令:- help:查看命令帮助,具体命令查询在gdb中输入help+命令,简写h。
- run:重新开始运行文件,简写r。
- list:查看原代码,每次只能显示10行,如果需要再显示后面的代码时,可以再次使用list指令或直接回车。
简写l。
- set:设置变量的值。
- next:单步调试(逐过程,函数直接执行),简写n。
- step:单步调试(逐语句:跳入自定义函数内部执行),简写s。
- backtrace:查看函数的调用的栈帧和层级关系,简写bt。
- info locals:打印出当前函数中所有局部变量及其值,简写i lo。
- info breakpoints:查看当前设置的所有断点。
- finish:结束当前函数,返回到函数调用点。
- continue:继续运行,简写c。
- until:执行到指定行数或者函数。
- print:打印值及地址,简写p。
- quit:退出gdb,简写q。
- break<num>:在第num行设置断点,简写b。
- delete breakpoints<num>:删除第num个断点,简写d。
- display:追踪查看具体变量值。
- undisplay:取消追踪观察变量。
- watch<变量>:被设置观察点的变量发生修改时,打印显示。
- i watch:显示观察点。
- enable breakpoints:启用断点。
- disable breakpoints:禁用断点。
在实际使用中,你可以根据具体需求选择合适的命令进行调试。
如果你还需要了解其他的命令,可以再次向我提问。
gdb调试方法说明(GDBdebugmethodinstructions)
gdb调试方法说明(GDB debug method instructions)GDB debugging essence and examplesList of column files1.List(GDB) list, Line1, line2Two: executive procedureTo run the program for debugging, you can use the run command, behind it can follow to any of the parameters of the program, including the standard input and output descriptor (< and >) and shell wildcards (* and? [[]]).If you use the run command without arguments, it is useful for GDB to use the parameters you gave to the previous run command again.Using the set args command, you can modify the parameters that are sent to the program, and you can use the show args command to see a list of its default parameters.(GDB) set args - B - x(GDB) show argsThe backtrace command provides a backward tracking function for the stack.The Backtrace command generates a list that contains the parameters that start with the recent process, so the effective procedure and the parameters that call them.Three: display dataUsing the print command, you can check the values of each variable.(GDB) print p (P is a variable name)The whatis command displays the type of a variable(GDB) whatis pType = int *Print is a powerful command of GDB that uses it to display any valid expressions in the language being debugged. In addition to containing variables in your program, expressions can include the following:L calls to functions in a program(GDB) print find_entry (1,0)L data structures and other complex objects(GDB) print *table_start$8={e=reference= '\000', location=0x0, next=0x0}Historical components of L values(GDB) print $1 ($1 is a history variable, which can be referenced directly later on $1)L artificial arrayA human array provides a way to display the contents of a memory block (array, section, or dynamically allocated storage). The early debugger didn't have a good way of changing any pointer to an array. Just as with arguments, let's look at the 10 integers in memory after the variable H, and the syntax of a dynamic array, as shown below:Base@lengthTherefore, you can use h@10 to display the 10 elements behind h:(GDB) print h@10$13= (-1345,23, -234,0,0,0,98345,10)Four: breakpoint (breakpoint)The break command, which can be abbreviated as B, can be used to set breakpoints in the debugger, which has the following four forms:L break line-number stops the program just before executing agiven row.The L break function-name stops the program just before entering the specified function.L break line-or-function if condition, if condition (condition) is true, the program stops when it arrives at the specified row or function.L break routine-name sets the breakpoint at the entrance of the specified routineIf the program is made up of many original files, you can set breakpoints in each of the original files instead of setting breakpoints in the current original file:(GDB) break filename:line-number(GDB) break filename:function-nameTo set a conditional breakpoint, you can use the break if command as follows:(GDB) break, line-or-function, if, exprCases:(GDB) break 46, if, testsize==100Continue running from breakpoint: countinue commandFive. Breakpoint management1. displays the breakpoint information for the current gdb:(GDB) info breakHe displays all breakpoint information in the form as follows:Num, Type, Disp, Enb, Address, What"Breakpoint keep y 0x000028bc in init_random at qsort2.c:155""Breakpoint keep y 0x0000291c in init_organ at qsort2.c:168"(GDB)2. deletes a specified breakpoint:(GDB) delete breakpoint 1该命令将会删除编号为1的断点, 如果不带编号参数, 将删除所有的断点Delete breakpoint (GDB)3.禁止使用某个断点(GDB) disable breakpoint 1该命令将禁止断点 1, 同时断点信息的 (ENB) 域将变为 n4.允许使用某个断点(GDB) enable breakpoint 1该命令将允许断点 1, 同时断点信息的 (ENB) 域将变为 y 5.清除原文件中某一代码行上的所有断点The clean number (GDB)注: number 为原文件的某个代码行的行号六.变量的检查和赋值L: 识别数组或变量的类型 WhatisL ptype: 比whatis的功能更强, 他可以提供一个结构的定义L set variable: 将值赋予变量L print 除了显示一个变量的值外, 还可以用来赋值七.单步执行L next不进入的单步执行L step进入的单步执行如果已经进入了某函数, 而想退出该函数返回到它的调用函数中, 可使用命令finish八.函数的调用L call name 调用和执行一个函数(GDB) call Gen _ and _ sork (1234,1,0)(GDB) call printf ("ABCD")$1 = 4L finish 结束执行当前函数, 显示其返回值 (如果有的话)九.机器语言工具有一组专用的gdb变量可以用来检查和修改计算机的通用寄存器, gdb提供了目前每一台计算机中实际使用的4个寄存器的标准名字:L $PC: 程序计数器L $FP: 帧指针 (当前堆栈帧)L $SP: 栈指针L $PS: 处理器状态十.信号Gdb通常可以捕捉到发送给它的大多数信号, 通过捕捉信号, 它就可决定对于正在运行的进程要做些什么工作.例如, 按ctrl - c将中断信号发送给gdb, 通常就会终止gdb.但是你或许不想中断gdb, 真正的目的是要中断gdb正在运行的程序, 因此, gdb要抓住该信号并停止它正在运行的程序, 这样就可以执行某些调试操作.Handle命令可控制信号的处理, 他有两个参数, 一个是信号名, 另一个是接受到信号时该作什么.几种可能的参数是:L Nostop 接收到信号时, 不要将它发送给程序, 也不要停止程序.L stop 接受到信号时停止程序的执行, 从而允许程序调试; 显示一条表示已接受到信号的消息 (禁止使用消息除外)L print 接受到信号时显示一条消息L noprint 接受到信号时不要显示消息 (而且隐含着不停止程序运行)L pass 将信号发送给程序, 从而允许你的程序去处理它、停止运行或采取别的动作.L nopass 停止程序运行, 但不要将信号发送给程序.例如, 假定你截获sigpipe信号, 以防止正在调试的程序接受到该信号, 而且只要该信号一到达, 就要求该程序停止, 并通知你.要完成这一任务, 可利用如下命令:(GDB) handle SIGPIPE stop print请注意, 你可以用信号编号替代信号名 unix的信号名总是采用大写字母!如果你的程序要执行任何信号处理操作, 就需要能够测试其信号处理程序, 为此, 就需要一种能将信号发送给程序的简便方法, 这就是signal命令的任务.该命令的参数是一个数字或者一个名字, 如sigint.假定你的程序已将一个专用的sigint (键盘输入, 或ctrl - C;Signal 2) the signal handler is programmed to take a cleanup action. If you want to test the signal handler, you can set a breakpoint and use the following command:(GDB) signal 2Continuing, with, signal, SIGINT (2)The program continues, but immediately transmits the signal, and the handler starts runningEleven. Search for original filesSearch text:, this command can be displayed in the current file, including the next line of the text string.Reverse-search text:, this command displays the previous line containing text.Twelve.UNIX interfaceThe shell command starts the UNIX shell, and the CTRL-D exits the shell and returns to gdb.Thirteen. The history of commandTo allow the use of historical commands, use the set history expansion on command(GDB) set, history, expansion, onSummary: common GDB commandsThe backtrace displays the current location in the program and the stack trace indicating how to reach the current location (synonyms: where)Breakpoint sets a breakpoint in the programCD changes the current working directoryClear deletes the breakpoint at the stop just nowWhen the commands hits the breakpoint, list the commands that will be executedContinue starts from breakpoint and continues executionDelete deletes a breakpoint or monitoring point; it can also be used with other commandsWhen the display program stops, variables and expressions are displayedDown moves down the stack frame so that another function becomes the current functionFrame selects the frame for the next continue commandInfo displays various information related to the programJump starts running at another point in the source programKill abort the program running under GDB controlList lists the contents of the original file corresponding to the program being executedNext executes the next source line, thus executing a function in its entiretyPrint displays the value of a variable or expressionPWD displays the current working directoryPype displays the content of a data structure, such as a structure or C++ classQuit quit GDBReverse-search searches the source file in reverse for regular expressionsRun executes the programSearch searches for regular expressions in source filesSet variable assign values to variablesSignal sends a signal to a running processStep executes the next source line and, if necessary, goes to the next functionUndisplay display command counter command, do not display the expressionUntil ends the current loopUp moves up the stack frame so that another function becomes the current functionWatch sets up a monitoring point (i.e., data breakpoint) in the programWhatis displays variables or function types****************************************************The debugger for GNU, called GDB, is an interactive tool that works in character mode. In the X Window system, there is a GDB front end graphical tool called xxgdb. GDB is a powerful debugger that performs the following debugging tasks:* setting breakpoints;* monitoring the value of program variables;* a single step of the program;* modify the value of a variable.Before you can use the GDB debugger, you must compile the source file using the -g option. You can define the CFLAGS variable in makefile as follows:CFLAGS = -gWhen running the GDB debugger, you use the following command:GDB prognameTyping help at the GDB prompt lists the categories of commands, and the main categories are:* aliases: Command alias* breakpoints: breakpoint definition;* data: data view;* files: specify and view files;* internals: maintenance command;* running: program execution;* stack: call stack view;* statu: status view;* tracepoints: trace program execution.Type the category name of the help followed by the command to obtain a detailed list of the class commands.Common commands for GDBCommand explanationBreak NUM sets breakpoints on the specified row.BT shows all the call stack frames. This command can be used to display the order in which the function is called.Clear deletes a breakpoint set on a particular source file or a particular line. Its usage is clear FILENAME:NUMContinue continues executing the program being debugged. This command is used when the program stops operating because of processing signals or breakpoints.Display EXPR displays the value of the expression every time the program stops. Expressions are made up of variables that are defined by the program.File FILE loads the specified executable file for debugging.Help NAME displays help information for the specified command.Info break displays the current breakpoint list, including the number of times the breakpoint is reached.Info files displays detailed information about the debugged files.Info func displays all the function names.Info local displays local variable information when functions are used.Info prog displays the execution state of the debugger.Info var displays all global and static variable names.Kill terminates the program being debugged.List displays the source code segment.Make runs the make tool without exiting the gdb.Next performs a single line of source code without stepping into other functions.Print EXPR displays the value of the expression EXPR.The example uses ******gdb ************************Round and roundListing 1 a C source with error bugging.cCode:Round and round1, I, ncludeTwo3, static, char, buff, [256];4 static char* string;5 int main (){67 printf ("Please input a string:");8 gets (string);9 printf (\nYour, string,%s\n, is:, string);10}Round and roundThe program above is very simple, the purpose is to accept user input, and then print out the user's input. The program usesan uninitialized string address string, so after compiling and running, there will be a Segment Fault error:$GCC, -o, bugging, -g, bugging.c$./buggingPlease, input, a, string:, ASFDSegmentation fault (core dumped)To find the problems in the program, we use GDB and follow these steps:1. run the GDB bugging command and load the bugging executable file;2. execute the loaded bugging command run;3. use the where command to see where the program went wrong;4. use the list command to view the code that calls the gets function;5. the only factor that can cause errors in the gets function is the variable string. View the value of string with the print command;6. in GDB, we can directly modify the value of a variable, as long as you take a valid pointer value from string, and for this reason, we set breakpoint break 8 at the eighth line;7., the program rerun to stop at the eighth line, then we can use the set variable command to modify the value of string;8., and then continue to run, will see the correct program operation results.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设置断点(BreakPoint )我们用break 命令来设置断点。
正面有几点设置断点的方法:break <function>在进入指定函数时停住。
C++ 中可以使用class::function 或function(type,type) 格式来指定函数名。
break <linenum>在指定行号停住。
break +offsetbreak -offset在当前行号的前面或后面的offset 行停住。
offiset 为自然数。
break filename:linenum在源文件filename 的linenum 行处停住。
break filename:function在源文件filename 的function 函数的入口处停住。
break *address在程序运行的内存地址处停住。
breakbreak 命令没有参数时,表示在下一条指令处停住。
break ... if <condition>... 可以是上述的参数,condition 表示条件,在条件成立时停住。
比如在循环境体中,可以设置break if i=100 ,表示当i 为100 时停住程序。
查看断点时,可使用info 命令,如下所示:(注:n 表示断点号)info breakpoints [n]info break [n]二、设置观察点(WatchPoint )观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。
我们有下面的几种方法来设置观察点:watch <expr>为表达式(变量)expr 设置一个观察点。
一量表达式值有变化时,马上停住程序。
rwatch <expr>当表达式(变量)expr 被读时,停住程序。
awatch <expr>当表达式(变量)的值被读或被写时,停住程序。
info watchpoints列出当前所设置了的所有观察点。
三、设置捕捉点(CatchPoint )你可设置捕捉点来补捉程序运行时的一些事件。
如:载入共享库(动态链接库)或是C++ 的异常。
设置捕捉点的格式为:catch <event>当event 发生时,停住程序。
event 可以是下面的内容:1 、throw 一个C++ 抛出的异常。
(throw 为关键字)2 、catch 一个C++ 捕捉到的异常。
(catch 为关键字)3 、exec 调用系统调用exec 时。
(exec 为关键字,目前此功能只在HP-UX 下有用)4 、fork 调用系统调用fork 时。
(fork 为关键字,目前此功能只在HP-UX 下有用)5 、vfork 调用系统调用vfork 时。
(vfork 为关键字,目前此功能只在HP-UX 下有用)6 、load 或load <libname> 载入共享库(动态链接库)时。
(load 为关键字,目前此功能只在HP-UX 下有用)7 、unload 或unload <libname> 卸载共享库(动态链接库)时。
(unload 为关键字,目前此功能只在HP-UX 下有用)tcatch <event>只设置一次捕捉点,当程序停住以后,应点被自动删除。
四、维护停止点上面说了如何设置程序的停止点,GDB 中的停止点也就是上述的三类。
在GDB 中,如果你觉得已定义好的停止点没有用了,你可以使用delete 、clear 、disable 、enable 这几个命令来进行维护。
clear清除所有的已定义的停止点。
clear <function>clear <filename:function>清除所有设置在函数上的停止点。
clear <linenum>clear <filename:linenum>清除所有设置在指定行上的停止点。
delete [breakpoints] [range...]删除指定的断点,breakpoints 为断点号。
如果不指定断点号,则表示删除所有的断点。
range 表示断点号的范围(如:3-7 )。
其简写命令为 d 。
比删除更好的一种方法是disable 停止点,disable 了的停止点,GDB 不会删除,当你还需要时,enable 即可,就好像回收站一样。
disable [breakpoints] [range...]disable 所指定的停止点,breakpoints 为停止点号。
如果什么都不指定,表示disable 所有的停止点。
简写命令是dis.enable [breakpoints] [range...]enable 所指定的停止点,breakpoints 为停止点号。
enable [breakpoints] once range...enable 所指定的停止点一次,当程序停止后,该停止点马上被GDB 自动disable 。
enable [breakpoints] delete range...enable 所指定的停止点一次,当程序停止后,该停止点马上被GDB 自动删除。
五、停止条件维护前面在说到设置断点时,我们提到过可以设置一个条件,当条件成立时,程序自动停止,这是一个非常强大的功能,这里,我想专门说说这个条件的相关维护命令。
一般来说,为断点设置一个条件,我们使用if 关键词,后面跟其断点条件。
并且,条件设置好后,我们可以用condition 命令来修改断点的条件。
(只有break 和watch 命令支持if ,catch 目前暂不支持if )condition <bnum> <expression>修改断点号为bnum 的停止条件为expression 。
condition <bnum>清除断点号为bnum 的停止条件。
还有一个比较特殊的维护命令ignore ,你可以指定程序运行时,忽略停止条件几次。
ignore <bnum> <count>表示忽略断点号为bnum 的停止条件count 次。
六、为停止点设定运行命令我们可以使用GDB 提供的command 命令来设置停止点的运行命令。
也就是说,当运行的程序在被停止住时,我们可以让其自动运行一些别的命令,这很有利行自动化调试。
对基于GDB 的自动化调试是一个强大的支持。
commands [bnum]... command-list ...end为断点号bnum 指写一个命令列表。
当程序被该断点停住时,gdb 会依次运行命令列表中的命令。
例如:break foo if x>0commandsprintf "x is %d\n",xcontinueend断点设置在函数foo 中,断点条件是x>0 ,如果程序被断住后,也就是,一旦x 的值在foo 函数中大于0 ,GDB 会自动打印出x 的值,并继续运行程序。
如果你要清除断点上的命令序列,那么只要简单的执行一下commands 命令,并直接在打个end 就行了。
七、断点菜单在C++ 中,可能会重复出现同一个名字的函数若干次(函数重载),在这种情况下,break <function> 不能告诉GDB 要停在哪个函数的入口。
当然,你可以使用break <function(type)> 也就是把函数的参数类型告诉GDB ,以指定一个函数。
否则的话,GDB 会给你列出一个断点菜单供你选择你所需要的断点。
你只要输入你菜单列表中的编号就可以了。
如:(gdb) b String::after[0] cancel[1] all[2] file:; line number:867[3] file:; line number:860[4] file:; line number:875[5] file:; line number:853[6] file:; line number:846[7] file:; line number:735> 2 4 6Breakpoint 1 at 0xb26c: file , line 867.Breakpoint 2 at 0xb344: file , line 875.Breakpoint 3 at 0xafcc: file , line 846.Multiple breakpoints were set.Use the "delete" command to delete unwantedbreakpoints.(gdb)可见,GDB 列出了所有after 的重载函数,你可以选一下列表编号就行了。
0 表示放弃设置断点,1 表示所有函数都设置断点。
八、恢复程序运行和单步调试当程序被停住了,你可以用continue 命令恢复程序的运行直到程序结束,或下一个断点到来。
也可以使用step 或next 命令单步跟踪程序。
continue [ignore-count]c [ignore-count]fg [ignore-count]恢复程序运行,直到程序结束,或是下一个断点到来。
ignore-count 表示忽略其后的断点次数。
continue ,c ,fg 三个命令都是一样的意思。
step <count>单步跟踪,如果有函数调用,他会进入该函数。
进入函数的前提是,此函数被编译有debug 信息。
很像VC 等工具中的step in 。
后面可以加count 也可以不加,不加表示一条条地执行,加表示执行后面的count 条指令,然后再停住。
next <count>同样单步跟踪,如果有函数调用,他不会进入该函数。
很像VC 等工具中的step over 。
后面可以加count 也可以不加,不加表示一条条地执行,加表示执行后面的count 条指令,然后再停住。
set step-modeset step-mode on打开step-mode 模式,于是,在进行单步跟踪时,程序不会因为没有debug 信息而不停住。
这个参数有很利于查看机器码。
set step-mod off关闭step-mode 模式。
finish运行程序,直到当前函数完成返回。
并打印函数返回时的堆栈地址和返回值及参数值等信息。
当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。
stepi 或sinexti 或ni单步跟踪一条机器指令!一条程序代码有可能由数条机器指令完成,stepi 和nexti 可以单步执行机器指令。
与之一样有相同功能的命令是“ display/i $pc ” ,当运行完这个命令后,单步跟踪会在打出程序代码的同时打出机器指令(也就是汇编代码)九、信号(Signals )信号是一种软中断,是一种处理异步事件的方法。