gdb调试方法说明

合集下载

gdb交叉编译调试教程

gdb交叉编译调试教程

gdb交叉编译调试教程1.引言1.1 概述引言是一篇长文的开头部分,用于向读者介绍文章的背景、内容和目的。

在本篇长文中,我们介绍了gdb交叉编译调试的教程。

在本文的概述部分,我们将对文章的主要内容进行简要介绍。

本文主要分为引言、正文和结论三个部分。

在引言部分,我们首先介绍了本文的概述。

随后,我们会详细说明文章的结构和目的。

本文的主要目的是教会读者如何使用gdb进行交叉编译调试。

我们将从gdb的简介开始,介绍gdb的基本功能和用途。

然后,我们会对交叉编译进行概述,详细说明交叉编译的原理和常见的应用场景。

在结论部分,我们将对本文进行总结,并提供一些建议,帮助读者更好地进行实践。

通过本文的学习,读者将能够掌握gdb交叉编译调试的基本技巧,为软件开发和调试提供便利。

同时,读者也能够理解交叉编译的原理和应用,进一步提高自己的编程能力。

接下来,让我们开始正文的内容,详细介绍gdb的相关知识和交叉编译的实践操作。

文章结构部分的内容可以包括以下内容:文章结构指导读者对整篇文章的组织和内容有一个清晰的了解。

通过明确的结构,读者可以更好地理解和学习文章中的知识点。

下面是文章结构的主要部分:1.2 文章结构本文分为引言、正文和结论三个部分。

引言部分(Introduction)主要介绍了本文的背景和目的。

其中,概述部分介绍了本文要讲解的主题:gdb交叉编译调试。

通过引言部分,读者可以了解到本文所涉及的领域和问题,并对后续内容有一个整体的了解。

正文部分(Main Body)是本文的主要内容,分为多个小节。

第一个小节(2.1 GDB简介)介绍了GDB的基本概念和功能,包括它是什么、为什么要使用它以及如何使用它进行调试等。

通过这一小节,读者可以快速了解GDB的基本知识。

第二个小节(2.2 交叉编译概述)介绍了交叉编译的基本概念和原理。

解释了为什么需要进行交叉编译以及如何进行交叉编译。

此小节还可以涵盖一些常见的交叉编译工具和方法,以帮助读者更好地理解交叉编译的过程和技术。

GDB100技术暨使用说明书

GDB100技术暨使用说明书

GDB100技术暨使用说明书前言GDB100是一款高性能的调试器,适用于各种嵌入式系统、服务器以及桌面程序的调试。

本说明书将详细介绍GDB100的功能、用法以及注意事项,帮助用户快速掌握该调试器的使用方法。

功能介绍全面的调试功能GDB100支持各种调试功能,包括断点调试、单步调试、变量监视、函数调用跟踪等。

用户可以根据需要随时打开或关闭这些功能。

多种调试接口GDB100可通过多种接口与被调试程序通信,支持串口、网络、JTAG等多种通信方式,用户可以根据不同的需求选择合适的接口进行调试。

多种编程语言支持GDB100支持多种编程语言,包括C、C++、Python等,用户可以根据自己的项目需求选择合适的编程语言进行开发和调试。

跨平台支持GDB100可以在Linux、Windows、macOS等多个操作系统上运行,保证了用户在不同平台上使用调试器的便捷性和稳定性。

安装GDB100用户可以从GDB100的官方网站上下载安装包,根据提示进行安装。

安装完成后,用户需要将GDB100添加到环境变量中,以便在命令行中使用。

连接被调试程序串口连接如果需要通过串口连接被调试程序,用户需要先确定串口的连接参数,包括串口号、波特率、数据位等。

然后,在命令行中输入如下命令:gdb -ex 'target remote /dev/ttyS0' program.elf其中,/dev/ttyS0为串口号,program.elf为被调试程序的可执行文件。

网络连接如果需要通过网络连接被调试程序,用户需要先确定被调试程序的IP地址和端口号,然后在命令行中输入如下命令:gdb -ex 'target remote IP:port' program.elf其中,IP为被调试程序的IP地址,port为端口号,program.elf 为被调试程序的可执行文件。

如果需要通过JTAG连接被调试程序,用户需要先确定JTAG连接的接口类型和连接参数,然后在命令行中输入如下命令:gdb -ex 'target remote :port' -ex 'monitor jtag_devic e_type connection_arguments' program.elf其中,port为JTAG连接的端口号,jtag_device_type为JTAG 设备类型,connection_arguments为连接参数,program.elf为被调试程序的可执行文件。

gdb调试技巧

gdb调试技巧

gdb调试技巧GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

它是一种强大的命令行调试工具。

一般来说,调试器的功能:能够运行程序,设置所有能影响程序运行的参数;能够让程序在指定条件下停止运行;能够在程序停止时检查所有参数的情况;能够根据指定条件改变程序的运行。

gdb调试源代码流程:1)进入GDB #gdb test只需输入GDB和要调试的可执行文件即可,在GDB的启动画面中指出了GDB的版本号、遵循的许可等信息,接下来就进入了由"(gdb)"开头的命令行界面了;2)查看文件(gdb) l在GDB中键入"l"(list)就可以查看程序的源码了,GDB列出的源代码中明确地给出了对应的行号,方便代码的定位;3)设置断点(gdb) b 6只需在"b"(break)后加入对应的行号即可,在GDB中利用行号设置断点是指代码运行到对应行之前暂停;设置断点可以使程序执行到某个位置时暂停,程序员在该位置处可以方便地查看变量的值、堆栈情况等;一般情况下,源代码中大家行号与用户书写程序的行号是一致的,但有时由于用户的某些编译选项会导致行号不一致的情况,因此,一定要查看在GDB中的行号;4)查看断点处情况(gdb) info b可以键入"info b"来查看断点处情况,可以设置多个断点;5)运行代码(gdb) rGDB默认从首行开始运行代码,键入"r"(run)即可;程序运行到断点处停止。

6)看变量值(gdb) p n在程序暂停之后,程序员可以查看断点处的相关变量值,在GDB 中只需键入"p 变量名"(print)即可;GDB在显示变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引用标记,以后若想再次引用此变量,就可以直接写作"$N",而无需写冗长的变量名;7)观察变量(gdb) watch n在某一循环处,往往希望能够观察一个变量的变化情况,这时就可以键入命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;8)单步运行(gdb) n单步运行是指一次只运行一条语句,这样可以方便查看程序运行的结果,在此处只需键入"n"(next)即可;随着程序的单步运行,当变量n的值发生变化时,GDB就会自动显示出n的变化情况。

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使用教程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 调试函数
要调试一个函数,你需要以下步骤:1. 使用`gdb` 命令行工具启动你的程序:`gdb <executable>`,其中`<executable>` 是你要调试的可执行文件。

2. 设置断点:使用`break` 命令在你要调试的函数的位置设置断点。

例如,如果你要调试的函数是`my_function()`,可以使用`break my_function` 来设置断点。

3. 启动程序:使用`run` 命令启动程序,然后程序将在断点处停止执行。

4. 执行程序:使用`next` 命令按行执行代码,或使用`step` 命令进入函数内部执行。

5. 在调试过程中查看变量的值:使用`print` 命令来查看变量的值。

例如,可以使用`print variable_name` 来查看变量`variable_name` 的值。

6. 继续执行程序:使用`continue` 命令继续执行程序,直到下一个断点或程序结束。

7. 在调试结束后退出`gdb`:使用`quit` 命令退出`gdb`。

这些是基本的
`gdb` 调试函数的使用方法。

你还可以使用其他命令来查看堆栈信息、设置条件断点、跳到指定行等。

可以使用`help` 命令来获取更多有关`gdb` 命令的信息。

gdb 使用方法

gdb 使用方法

gdb 使用方法一、基本用法1. 启动gdb可以通过在命令行中输入"gdb"命令来启动gdb,并指定要调试的可执行文件作为参数。

例如,要调试名为"program"的可执行文件,可以输入以下命令:```gdb program```2. 设置断点断点是一个程序中的特定位置,当程序执行到该位置时,会暂停执行,从而可以检查程序的状态。

可以使用"gdb"命令设置断点。

例如,要在程序的第10行设置一个断点,可以输入以下命令:```break 10```可以使用"break"命令指定函数名或文件名和行号来设置断点。

3. 运行程序在gdb中运行程序时,可以使用"run"命令。

如果程序需要命令行参数,可以在"run"命令后面添加这些参数。

例如,要运行程序并传递参数"arg1"和"arg2",可以输入以下命令:```run arg1 arg2```4. 执行程序在gdb中执行程序时,可以使用"continue"命令。

该命令会让程序继续执行,直到遇到下一个断点或程序结束。

5. 单步执行在gdb中,可以使用"next"命令逐行执行程序。

该命令会执行当前行,并将程序指针移到下一行。

如果当前行是函数调用,"next"命令会将程序指针移到函数的第一行。

6. 查看变量的值在gdb中,可以使用"print"命令查看变量的值。

例如,要查看变量"var"的值,可以输入以下命令:```print var```7. 修改变量的值在gdb中,可以使用"set"命令修改变量的值。

例如,要将变量"var"的值设置为10,可以输入以下命令:```set var = 10```8. 退出gdb在gdb中退出调试会话时,可以使用"quit"命令。

(2021年整理)GDB调试命令手册.

(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调试回调函数

gdb调试回调函数GDB是一种强大的调试工具,可以帮助开发人员找出程序中的错误并进行调试。

在调试过程中,经常需要使用回调函数来处理某些事件。

下面是关于如何在GDB中调试回调函数的详细步骤。

1. 编译程序时加上-g选项,以便在GDB中进行调试。

2. 在GDB中启动程序。

可以使用以下命令:```gdb <executable>```3. 设置断点。

可以使用以下命令:```break <function_name>```4. 运行程序。

可以使用以下命令:run```5. 当程序停止时,可以使用以下命令进入回调函数:```step```6. 在回调函数中进行单步调试。

可以使用以下命令:```next```7. 如果需要查看变量的值,可以使用以下命令:```print <variable_name>```8. 如果需要修改变量的值,可以使用以下命令:```set <variable_name> = <new_value>```9. 如果需要退出回调函数并返回到主函数,则可以使用以下命令:```return```10. 继续执行程序直到下一个断点处。

可以使用以下命令:```continue```总之,在GDB中调试回调函数需要注意一些细节和技巧,例如设置断点、单步跟踪、变量查看和修改等等。

通过这些方法,开发人员可以更加方便地找出程序中的错误并进行调试。

gdb 调试函数

gdb 调试函数

gdb 调试函数摘要:1.GDB 简介2.GDB 调试函数的方法3.GDB 调试函数的实例4.总结正文:一、GDB 简介GDB(GNU Debugger)是一个用于调试程序的强大工具,尤其适用于C 和C++程序。

它能够在程序运行过程中,观察变量的值、执行流程、内存使用情况等,帮助开发者发现和修复程序中的错误。

在GDB 中,我们可以使用各种命令来调试函数,本文将介绍如何使用GDB 调试函数。

二、GDB 调试函数的方法1.使用断点:在GDB 中,我们可以在函数入口或者代码中添加断点,当程序运行到断点时,GDB 会暂停执行,允许我们观察变量值、执行流程等。

使用命令`break`或者`b`来设置断点。

2.运行程序:在GDB 中,使用`run`命令来启动程序。

当程序运行到断点时,GDB 会暂停执行,进入调试状态。

3.查看函数调用:在GDB 中,我们可以使用`backtrace`或者`bt`命令来查看当前函数调用栈,了解函数之间的调用关系。

4.设置监视:在GDB 中,我们可以使用`watch`命令来监视某个变量的值。

当变量的值发生变化时,GDB 会自动暂停执行,并显示变量的最新值。

5.单步执行:在GDB 中,我们可以使用`step`或者`s`命令来执行当前函数的下一条语句。

使用`next`命令来执行当前函数的下一个函数调用。

6.退出函数:在GDB 中,我们可以使用`finish`命令来退出当前函数,并返回到调用函数的地方。

三、GDB 调试函数的实例假设我们有一个简单的C 程序,包含一个名为`add`的函数,用于实现两个整数的加法。

程序如下:```c#include <stdio.h>int add(int a, int b) {return a + b;}int main() {int result = add(3, 4);printf("%d", result);return 0;}```我们可以使用GDB 来调试这个函数,具体步骤如下:1.使用`gdb`命令编译程序,生成名为`add_example`的可执行文件。

GDB调试技巧

GDB调试技巧

1、GDB 启动一般来说GDB主要调试的是C/C++的程序。

要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。

使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。

如:> cc -g hello.c -o hello> g++ -g hello.cpp -o hello如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。

启动GDB的方法有以下几种:1、gdb <program>program也就是你的执行文件,一般在当然目录下。

2、gdb <program> core用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

3、gdb <program> <PID>如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。

gdb会自动attach上去,并调试他。

program应该在PATH环境变量中搜索得到。

GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。

我在下面只例举一些比较常用的参数:-symbols <file>-s <file>从指定文件中读取符号表。

-se file从指定文件中读取符号表信息,并把他用在可执行文件中。

-core <file>-c <file>调试时core dump的core文件。

-directory <directory>-d <directory>加入一个源文件的搜索路径。

默认搜索路径是环境变量中PATH所定义的路径。

2、GDB的命令概貌启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示:/home/hchen> gdbGNU gdb 5.1.1Copyright 2002 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-suse-linux".(gdb) helpList of classes of commands:aliases -- Aliases of other commandsbreakpoints -- Making program stop at certain pointsdata -- Examining datafiles -- Specifying and examining filesinternals -- Maintenance commandsobscure -- Obscure featuresrunning -- Running the programstack -- Examining the stackstatus -- Status inquiriessupport -- Support facilitiestracepoints -- Tracing of program execution without stopping the programuser-defined -- User-defined commandsType "help" followed by a class name for a list of commands in that class.Type "help" followed by command name for full documentation.Command name abbreviations are allowed if unambiguous.(gdb)gdb的命令很多,gdb把之分成许多个种类。

gdb调试(设置变量)(六)

gdb调试(设置变量)(六)

gdb调试(设置变量)(六)⼀旦使⽤GDB挂上被调试程序,当程序运⾏起来后,你可以根据⾃⼰的调试思路来动态地在GDB中更改当前被调试程序的运⾏线路或是其变量的值,这个强⼤的功能能够让你更好的调试你的程序,⽐如,你可以在程序的⼀次运⾏中⾛遍程序的所有分⽀。

⼀、修改变量值修改被调试程序运⾏时的变量值,在GDB中很容易实现,使⽤GDB的"print"或"set"命令即可完成。

如:(gdb) print x=4 (gdb) set x=4x=4这个表达式是C/C++的语法,意为把变量x的值修改为4,如果你当前调试的语⾔是Pascal,那么你可以使⽤Pascal的语法:x:=4。

在某些时候,很有可能你的变量和GDB中的参数冲突,如:(gdb) whatis widthtype = double(gdb) p width$4 = 13(gdb) set width=47Invalid syntax in expression.因为,set width是GDB的命令,所以,出现了“Invalid syntax in expression”的设置错误,此时,你可以使⽤set var命令来告诉GDB,width不是你GDB的参数,⽽是程序的变量名,如:(gdb) set var width=47"var"表⽰“width”是⼀个变量另外,还可能有些情况,GDB并不报告这种错误,所以保险起见,在你改变程序变量取值时,最好都使⽤set var格式的GDB命令。

⼆、跳转执⾏⼀般来说,被调试程序会按照程序代码的运⾏顺序依次执⾏。

GDB提供了乱序执⾏的功能,也就是说,GDB可以修改程序的执⾏顺序,可以让程序执⾏随意跳跃。

这个功能可以由GDB的jump命令来完:jump <linespec>指定下⼀条语句的运⾏点。

<linespce>可以是⽂件的⾏号,可以是file:line格式,可以是+num这种偏移量格式。

gdb编译和调试命令

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调试方法

常用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进行调试时,有一些常用的命令可以帮助我们进行调试。

下面是一些常用的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主要能为你做以下四件事,帮助你找出程序中的错误。

1.运行你的程序,设置所有的能影响程序运行的东西。

2.保证你的程序在指定的条件下停止。

3.当你程序停止时,让你检查发生了什么。

4.改变你的程序。

那样你可以试着修正某个bug引起的问题,然后继续查找另一个bug.二、GDB运行方式1.通常的调试可执行程序:gdb <可执行文档名>2.调试执行文件指定一个core文件:gdb <可执行文件名> core3.为执行的文件指定一个进程号:gdb <可执行文件名> <进程号>三、GDB常用命令下面先说明GDB的基本指令:(大部分命令使用时只要输入第一个字母就好了,同时支持TAB的自动补全,与shell相类似)1.help:查看帮助2.file:指定一个可执行文件进行调试,gdb将读取些文件的调试信息3.list:列出程序源文件4.run:装载完要调试的可执行文件后,可以用run命令运行可执行文件5.break:设置断点breakpoint,如b 25,则在源程序的第25行设置一个断点,当程序执行到第25行时,就会产生中断;也可以使用b funcname,funcname为函数的名称,当程序调用些函数时,则产生中断6.continue:c命令可以使中断的程序继续执行,直到下一个中断点或程序结束7.print:输入某个变量的值,如程序定义了一个int aa的就是,p aa就会输出aa的当前值8.next:程序执行到断点时中断执行,可以用n指令进行单步执行9.step:程序执行到断点时中断执行,可以用s指令进行单步执行进某一函数,如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish10.attach:命令为attach PROCESS-ID,这个命令把一个已经运行的进程(在gdb外启动)连接入gdb,以便调试。

gdb 带命令行选项的参数

gdb 带命令行选项的参数

gdb 带命令行选项的参数摘要:1.介绍GDB2.GDB 的命令行选项参数3.使用GDB 命令行选项参数的实例正文:GDB 是一个强大的调试器,主要用于C 和C++程序的调试。

在使用GDB 时,我们可以通过命令行选项参数来控制GDB 的行为和功能。

下面我们来介绍一下GDB 的命令行选项参数及其使用方法。

首先,我们来介绍一下GDB 的基本使用方法。

要使用GDB,首先需要在编译时添加-g 选项,以包含调试信息。

然后,在运行时,使用以下命令启动GDB:```gdb -p <pid>```其中,`<pid>`是目标程序的进程ID。

接下来,我们来介绍一下GDB 的命令行选项参数:1.`-i <filename>`: 指定GDB 的输入文件,即要调试的程序。

如果省略此选项,GDB 将默认使用名为"a.out"的可执行文件。

2.`-c <filename>`: 指定GDB 的初始化脚本。

此脚本将在GDB 启动时自动运行。

3.`-G <filename>`: 指定GDB 的后缀脚本。

此脚本将在GDB 退出时自动运行。

4.`-p <pid>`: 指定要调试的进程的ID。

如果不指定此选项,GDB 将默认在当前目录下查找名为"a.out"的可执行文件。

5.`-d <directory>`: 指定GDB 的调试目录。

此目录将用于存储GDB 的调试数据和结果。

6.`-D <option>: 设置GDB 的调试选项。

例如,`-D break-on-start` 将在程序启动时自动设置断点。

下面,我们通过一个实例来说明如何使用GDB 的命令行选项参数:假设我们有一个名为"example.c"的C 程序,我们想要使用GDB 进行调试。

首先,在编译时添加-g 选项:```gcc -g example.c -o example```然后,在运行时,使用以下命令启动GDB:```gdb -i example -c my_gdb_script.c -p 1234```其中,`-i example` 指定了要调试的程序,`-c my_gdb_script.c` 指定了初始化脚本,`-p 1234` 指定了要调试的进程的ID。

常用GDB调试方法

常用GDB调试方法

1.什么是GDBGDB是GNU开源组织发布的一个强大的UNIX下的C/C++程序调试工具。

虽然GDB自身并没有Windows上大多数IDE的调试工具的高可视化和图形化功能,但命令行式调试也具有其很大的优点,如果希望在GDB上提升可视化功能,可以使用vim的gdb插件对gdb进行加强。

顺便提一下调试程序的几大功能:a)自定义方式启动程序;b)可以设置断点,使程序在指定的断点处停住;c)当程序停住时,可以查看程序的运行时数据;d)可以修改程序的运行时数据;2.GDB与编译器的-g和-ggdb参数cc/gcc/g++使用-g参数可以在编译时利用操作系统的“原生格式(native format)”生成调试信息。

这些信息GDB可以直接利用,当然其它的调试工具也能够直接利用。

-g参数是分级别的:a) -g2使用-g的默认的级别,此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。

如果不使用,则只有内存地址信息,没有响应的标识信息;b)-g3包含级别-g2中的所有调试信息,以及源代码中定义的宏;c)-g1级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储之用。

回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段。

-ggdb参数能够为GDB生成更为丰富的调试信息,与-g相同,也有3个级别,如果希望调试宏,则可以使用-ggdb3。

但与-g不同的是,-ggdb生成的信息只能被GDB使用,而不能被其它调试工具使用。

3.使用GDB启动调试使用GDB启动调试的方法有一下几种(只是关联上调试目标程序,并没有开始运行目标程序):a)gdb <program><program>也就是你的执行文件,要在PATH环境变量下能搜索到,一般在当前目录下;b)gdb <program> core_file用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

gdb调试方法说明(GDBdebugmethodinstructions)

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(gdb)print h@10
$13=(-1,345,23,-234,0,0,0,98,345,10)
四:断点(breakpoint)
break命令(可以简写为b)可以用来在调试的程序中设置断点,该命令有如下四种形式:
l break line-number 使程序恰好在执行给定行之前停止。
l ptype:比whatis的功能更强,他可以提供一个结构的定义
l set variable:将值赋予变量
l print 除了显示一个变量的值外,还可以用来赋值
七.单步执行
l next
不进入的单步执行
l step
进入的单步执行
如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish
l 人为数组
人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中在变量h后面的10个整数,一个动态数组的语法如下所示:
base@length
因此,要想显示在h后面的10个元素,可以使用h@10:
如果该程序是由很多原文件构成的,你可以在各个原文件中设置断点,而不是在当前的原文件中设置断点,其方法如下:
(gdb) break filename:line-number
(gdb) break filename:function-name
要想设置一个条件断点,可以利用break if命令,如下所示:
backtrace 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where)
breakpoint 在程序中设置一个断点
cd 改变当前工作目录
clear 删除刚才停止处的断点
commands 命中断点时,列出将要执行的命令
continue 从断点开始继续执行
delete 删除一个断点或监测点;也可与其他命令一起使用
八.函数的调用
l call name 调用和执行一个函数
(gdb) call gen_and_sork( 1234,1,0 )
(gdb) call printf(“abcd”)
$1=4
l finish 结束执行当前函数,显示其返回值(如果有的话)
九.机器语言工具
有一组专用的gdb变量可以用来检查和修改计算机的通用寄存器,gdb提供了目前每一台计算机中实际使用的4个寄存器的标准名字:
l $pc : 程序计数器
l $fp : 帧指针(当前堆栈帧)
l $sp : 栈指针
l $ps : 处理器状态
十.信号
gdb通常可以捕捉到发送给它的大多数信号,通过捕捉信号,它就可决定对于正在运行的进程要做些什么工作。例如,按CTRL-C将中断信号发送给gdb,通常就会终止gdb。但是你或许不想中断gdb,真正的目的是要中断gdb正在运行的程序,因此,gdb要抓住该信号并停止它正在运行的程序,这样就可以执行某些调试操作。
Num Type Disp Enb Address What
1 breakpoint keep y 0x000028bc in init_random at qsort2.c:155
2 breakpoint keep y 0x0000291c in init_organ at qsort2.c:168
* running:程序执行;
* stack:调用栈查看;
* statu:状态查看;
* tracepoints:跟踪程序执行。
键入 help 后跟命令的分类名,可获得该类命令的详细清单。
gdb 的常用命令
命令 解释
break NUM 在指定的行上设置断点。
l break function-name 使程序恰好在进入指定的函数之前停止。
l break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止。
l break routine-name 在指定例程的入口处设置断点
next 执行下一个源程序行,从而执行其整体中的一个函数
print 显示变量或表达式的值
pwd 显示当前工作目录
pype 显示一个数据结构(如一个结构或C++类)的内容
quit 退出gdb
reverse-search 在源文件中反向搜索正规表达式
run 执行该程序
search 在源文件中搜索正规表达式
l 对程序中函数的调用
(gdb) print find_entry(1,0)
l 数据结构和其他复杂对象
(gdb) print *table_start
$8={e=reference=’\000’,location=0x0,next=0x0}
l 值的历史成分
(gdb)print $1 ($1为历史记录变量,在以后可以直接引用 $1 的值)
4.允许使用某个断点
(gdb) enable breakpoint 1
该命令将允许断点 1,同时断点信息的 (Enb)域将变为 y
5.清除原文件中某一代码行上的所有断点
(gdb)clean number
注:number 为原文件的某个代码行的行号
六.变量的检查和赋值
l whatis:识别数组或变量的类型
display 程序停止时显示变量和表达时
down 下移栈帧,使得另一个函数成为当前函数
frame 选择下一条continue命令的帧
info 显示与该程序有关的各种信息
jump 在源程序中的另一点开始运行
kill 异常终止在gdb 控制下运行的程序
list 列出相应于正在执行的程序的原文件内容
(gdb)
2.删除指定的某个断点:
(gdb) delete breakpoint 1
该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点
(gdb) delete breakpoint
3.禁止使用某个断点
(gdb) disable breakpoint 1
该命令将禁止断点 1,同时断点信息的 (Enb)域将变为 n
(gdb) break line-or-function if expr
例:
(gdb) break 46 if testsize==100
从断点继续运行:countinue 命令
五.断点的管理
1. 显示当前gdb的断点信息:
(gdb) info break
他会以如下的形式显示所有的断点信息:
十二.UNIX接口
shell 命令可启动UNIX外壳,CTRL-D退出外壳,返回到 gdb.
十三.命令的历史
为了允许使用历史命令,可使用 set history expansion on 命令
(gdb) set history expansion on
小结:常用的gdb命令
l print 接受到信号时显示一条消息
l noprint 接受到信号时不要显示消息(而且隐含着不停止程序运行)
l pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。
l nopass 停止程序运行,但不要将信号发送给程序。
例如,假定你截获SIGPIPE信号,以防止正在调试的程序接受到该信号,而且只要该信号一到达,就要求该程序停止,并通知你。要完成这一任务,可利用如下命令:
利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。
(gdb)set args –b –x
(gdb) show args
backtrace命令为堆栈提供向后跟踪功能。
Backtrace 命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的参数。
GDB调试精粹及使用实例
一:列文件清单
1. List
(gdb) list line1,line2
二:执行程序
要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。
如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。
* 设置断点;
* 监视程序变量的值;
* 程序的单步执行;
* 修改变量的值。
在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。可在 makefile 中如下定义 CFLAGS 变量:
CFLAGS = -g
运行 gdb 调试程序时通常使用如下的命令:
gdb progname
在 gdb 提示符处键入help,将列出命令的分类,主要的分类有:
* aliases:命令别名
* breakpoints:断点定义;
* data:数据查看;
* files:指定并查看文件;
* internals:维护命令;
bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。
clear 删除设置在特定源文件、特定行上的断点。其用法为clear FILENAME:NUM
continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而 导致停止运行时。
三:显示数据
利用print 命令可以检查各个变量的值。
(gdb) print p (p为变量名)
whatis 命令可以显示某个变量的类型
相关文档
最新文档