GDB调试简易教程
- 格式:ppt
- 大小:1.07 MB
- 文档页数:47
gdb交叉编译调试教程1.引言1.1 概述引言是一篇长文的开头部分,用于向读者介绍文章的背景、内容和目的。
在本篇长文中,我们介绍了gdb交叉编译调试的教程。
在本文的概述部分,我们将对文章的主要内容进行简要介绍。
本文主要分为引言、正文和结论三个部分。
在引言部分,我们首先介绍了本文的概述。
随后,我们会详细说明文章的结构和目的。
本文的主要目的是教会读者如何使用gdb进行交叉编译调试。
我们将从gdb的简介开始,介绍gdb的基本功能和用途。
然后,我们会对交叉编译进行概述,详细说明交叉编译的原理和常见的应用场景。
在结论部分,我们将对本文进行总结,并提供一些建议,帮助读者更好地进行实践。
通过本文的学习,读者将能够掌握gdb交叉编译调试的基本技巧,为软件开发和调试提供便利。
同时,读者也能够理解交叉编译的原理和应用,进一步提高自己的编程能力。
接下来,让我们开始正文的内容,详细介绍gdb的相关知识和交叉编译的实践操作。
文章结构部分的内容可以包括以下内容:文章结构指导读者对整篇文章的组织和内容有一个清晰的了解。
通过明确的结构,读者可以更好地理解和学习文章中的知识点。
下面是文章结构的主要部分:1.2 文章结构本文分为引言、正文和结论三个部分。
引言部分(Introduction)主要介绍了本文的背景和目的。
其中,概述部分介绍了本文要讲解的主题:gdb交叉编译调试。
通过引言部分,读者可以了解到本文所涉及的领域和问题,并对后续内容有一个整体的了解。
正文部分(Main Body)是本文的主要内容,分为多个小节。
第一个小节(2.1 GDB简介)介绍了GDB的基本概念和功能,包括它是什么、为什么要使用它以及如何使用它进行调试等。
通过这一小节,读者可以快速了解GDB的基本知识。
第二个小节(2.2 交叉编译概述)介绍了交叉编译的基本概念和原理。
解释了为什么需要进行交叉编译以及如何进行交叉编译。
此小节还可以涵盖一些常见的交叉编译工具和方法,以帮助读者更好地理解交叉编译的过程和技术。
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(GNUDebugger)是一种强大的调试工具,可以帮助程序员诊断和修复程序中的错误。
在调试过程中,经常需要进入函数查看函数内部的变量和执行过程。
本文将介绍如何使用GDB进入函数进行调试。
一、编译程序时加入调试信息在使用GDB进行调试之前,需要在编译程序时加入调试信息。
使用gcc编译程序时,需要加上-g选项,如下所示:```gcc -g -o program program.c```-g选项会在编译生成的可执行文件中加入调试信息。
如果不加-g选项,GDB将无法正确地解释可执行文件中的代码。
二、启动GDB在编译生成的可执行文件上启动GDB,如下所示:```gdb program```这将启动GDB,并将可执行文件加载到GDB中。
此时,GDB处于交互模式,可以输入各种命令来进行调试。
三、设置断点在进入函数之前,需要设置一个断点,以便在程序执行到该断点时停止。
可以使用break命令设置断点,如下所示:break function_name```其中,function_name是要设置断点的函数名。
如果要在特定行设置断点,可以使用以下命令:```break file_naline_number```其中,file_name是要设置断点的源文件名,line_number是要设置断点的行号。
设置断点后,可以使用info breakpoints命令查看当前设置的断点。
四、运行程序在设置断点后,可以使用run命令运行程序,如下所示:```run```程序将开始运行,直到遇到设置的断点时停止。
停止时,GDB将显示断点所在的代码行,并在命令行提示符下等待输入。
五、进入函数在程序停止在断点处时,可以使用step命令进入函数,如下所示:step```这将进入当前断点所在的函数,并停止在函数内部的第一行代码处。
此时,GDB将显示函数名和第一行代码,并在命令行提示符下等待输入。
六、查看变量进入函数后,可以使用print命令查看函数内部的变量值,如下所示:```print variable_name```其中,variable_name是要查看的变量名。
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的安装及使用流程1. 简介gdb是GNU Debugger的缩写,是一款功能强大的调试工具,可用于调试C、C++等程序。
本文将介绍如何安装和使用gdb。
2. 安装gdb以下是在Ubuntu系统上安装gdb的步骤:1.打开终端。
2.输入以下命令安装gdb:sudo apt-get install gdb3.输入系统密码确认安装。
4.等待安装完成。
3. 使用gdb进行调试以下是使用gdb进行调试的基本流程:1.编写带有调试信息的程序。
2.编译程序时需要添加-g选项,以保留调试信息。
例如:gcc -g -o program program.c3.在终端中输入以下命令启动gdb:gdb program这里的program是编译后生成的可执行文件。
4.使用gdb的命令进行调试。
下面是一些常用的gdb命令:•run:运行程序。
•break:设置断点。
•continue:继续执行程序直到下一个断点。
•next:单步执行程序。
•print:打印变量的值。
•finish:执行完当前函数并返回到调用该函数的地方。
•quit:退出gdb。
5.根据需要重复步骤4进行调试,直到找到和解决问题。
4. 调试示例下面以一个简单的C程序进行演示:```c #include <stdio.h>int factorial(int n) { if (n == 1) return 1; else return n * factorial(n-1); } int main() { int n = 5; printf(。
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"命令。
(完整版)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进行调试。
1. 安装GDB在开始使用GDB之前,首先需要在您的机器上安装它。
您可以通过在终端中运行以下命令来检查是否已安装GDB:```gdb --version```如果显示了GDB的版本信息,则表示已安装。
如果没有安装,可以通过系统包管理器或从GDB官方网站上下载安装包进行安装。
2. 编译程序在使用GDB之前,需要确保程序是以调试模式编译的。
在编译时,可以使用`-g`选项来启用调试信息的生成。
例如:```gcc -g -o myprogram myprogram.c```这样会生成一个名为`myprogram`的可执行文件,其中包含调试信息。
3. 启动GDB运行以下命令以启动GDB并加载程序:```gdb myprogram```这将启动GDB并将`myprogram`加载到调试器中。
4. 设置断点断点是GDB中的一个重要特性,它可以让您在程序执行时暂停并进行调试。
您可以使用`break`命令来设置断点。
例如,要在`main`函数的第10行设置一个断点,运行以下命令:```break main:10```当程序执行到该行时,它将暂停并等待您执行下一步操作。
5. 执行程序您可以使用`run`命令来执行程序。
例如:```run```程序将开始执行,并在遇到断点或程序结束时停止。
6. 调试命令一旦程序暂停,您可以使用各种GDB命令来查看和操作程序状态。
以下是一些常用的命令:- `next`: 执行下一行代码。
- `step`: 进入函数并执行下一行代码。
- `print <variable>`: 打印变量的值。
- `backtrace`: 打印函数调用堆栈。
- `continue`: 继续执行程序直到下一个断点或程序结束。
可以使用`help`命令来获取有关其他命令的更多信息。
7. 查看内存和寄存器GDB还可以让您查看程序的内存和寄存器状态。
gdb调试教程GDB调试教程GDB(GNU调试器)是一个用于调试程序的强大工具。
它可以用于查找程序中的错误、跟踪程序的执行过程、观察程序的变量和内存、以及进行程序的优化等。
本教程将介绍如何使用GDB进行程序调试。
1. 启动GDB要启动GDB,只需在终端中键入“gdb”命令,然后在空格后输入需要调试的可执行文件的名称。
例如:```$ gdb my_program```2. 设置断点断点是在程序中设置的一个标记,用于指示GDB在此处停止程序的执行。
要设置断点,请在GDB提示符后输入“break”命令,后跟要设置断点的代码行或函数的名称。
例如:```(gdb) break main.cpp:10```3. 运行程序在设置完断点后,可以使用“run”命令来运行程序。
例如:```(gdb) run```程序将开始执行,并在达到断点处时暂停。
4. 调试命令在程序暂停执行时,可以使用各种GDB命令来检查程序的状态。
以下是一些常用的命令:- `list`:显示当前执行点周围的源代码。
- `print`:打印程序中的变量值。
- `step`:执行当前行,并进入任何调用的函数。
如果当前行有多个函数调用,GDB将进入第一个调用的函数。
- `next`:执行当前行,但不进入任何调用的函数。
如果当前行有多个函数调用,GDB将仅执行当前行并跳过后续的函数调用。
- `continue`:继续程序的执行,直到下一个断点或程序结束。
5. 查看堆栈使用“backtrace”命令可以查看程序运行时的函数调用堆栈。
这将显示调用堆栈的所有函数和相应的行号。
```(gdb) backtrace```6. 跟踪变量和内存GDB还可以让你查看程序的变量和内存。
使用“print”命令可以在程序暂停时查看变量的值。
例如:```(gdb) print my_variable```要查看内存中的内容,可以使用“x”命令。
例如,要查看内存位置0x100的内容:```(gdb) x /x 0x100```7. 结束调试会话要结束GDB调试会话,可以使用“quit”命令。
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使用说明1、简介GDB(GNU调试器)是一个功能强大的开源调试工具,用于调试C、C++、Fortran等编程语言的程序。
本文档将提供详细的GDB使用说明,包括安装、启动、基本命令以及高级功能的介绍。
2、安装a) 在Linux上安装GDB:在终端中运行以下命令安装GDB:```sudo apt-get install gdb```b) 在Windows上安装GDB:从GDB官方网站最新的Windows 安装包,并按照安装向导进行安装。
3、启动GDBa) 在Linux上启动GDB:在终端中运行以下命令启动GDB:```gdb [可执行文件名]```b) 在Windows上启动GDB:在命令提示符中切换到GDB的安装目录,然后执行以下命令启动GDB:```gdb:exe [可执行文件名]```4、基本命令a) 运行程序- `run`:开始执行程序。
- `r`:运行程序的简写形式。
b) 设置断点- `break [行号]`:在指定行号设置断点。
- `b [行号]`:设置断点的简写形式。
- `break [函数名]`:在指定函数设置断点。
- `b [函数名]`:设置断点的简写形式。
c) 单步执行- `next`:执行下一行语句。
- `n`:`next`命令的简写形式。
- `step`:进入函数内部执行。
- `s`:`step`命令的简写形式。
d) 打印变量- `print [变量名]`:打印指定变量的值。
- `p [变量名]`:`print`命令的简写形式。
e) 查看栈信息- `bt`:查看完整的栈回溯信息。
- `backtrace`:`bt`命令的完整形式。
f) 调试多线程程序- `info threads`:查看线程信息。
- `thread [线程号]`:切换到指定线程。
5、高级功能a) 控制程序的执行- `continue`:从当前位置继续执行程序。
- `c`:`continue`命令的简写形式。
编译和调试是软件开发过程中的重要步骤,尤其是在使用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调试1--包括反汇编及⽂件编码设置⼀。
编译gcc的完整编译过程⼤致为:预处理->编译->汇编->链接前三个步骤分别对应了-E、-S、-c三个选项。
编译阶段命令截断后的产物C源程序预处理gcc -E替换了宏的C源程序(没有了#define,#include…), 删除了注释编译gcc -S汇编源程序汇编gcc -c⽬标⽂件,⼆进制⽂件,允许有不在此⽂件中的外部变量、函数可执⾏程序,⼀般由多个⽬标⽂件或库链接⽽成,⼆进制⽂件,所有变量、函数都必须找得到链接gccobjdump是linux下⼀款反汇编⼯具,能够反汇编⽬标⽂件、可执⾏⽂件。
主要选项:objdump -f显⽰⽂件头信息objdump -d反汇编需要执⾏指令的那些sectionobjdump -D与-d类似,但反汇编中的所有sectionobjdump -h显⽰Section Header信息objdump -x显⽰全部Header信息objdump -s将所有段的内容以⼗六进制的⽅式打印出来gcc -c -o main.o main.c objdump -s -d main.o > main.o.txtgcc -o main main.c objdump -s -d main > main.txt因为 linux 下⽬标⽂件和可执⾏⽂件的内容格式是⼀样的,所以 objdump 既可以反汇编可执⾏⽂件也可以反汇编⽬标⽂件。
$ g++ main.cpp -o xmain$ ./xmain$ file xmainxmain: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=86d2a0552a2e36ac27d4c233c9ddfd462e0e599d, not stripped$nm xmain0000000000601068 B __bss_start0000000000601190 b completed.69730000000000601191 b _ZStL8__ioinitU _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@@GLIBCXX_3.4$ strip xmain$ nm xmain: no symbols在实际的开发中,经常需要对动态库.so进⾏strip操作,减少占地空间。
gdb跟踪调试程序的方法嘿,朋友们!今天咱来聊聊 gdb 跟踪调试程序的那些事儿。
这就好比你在一个神秘的代码世界里探险,而 gdb 就是你手中的神奇魔杖!首先呢,你得把 gdb 这个小工具准备好。
就像战士上战场得有趁手的兵器一样,gdb 就是咱程序员的得力助手。
然后,当你要调试一个程序的时候,就像打开一扇通往奇妙世界的大门。
你可以用 gdb 去加载这个程序,这感觉就像是你进入了一个满是代码宝藏的洞穴。
在这个过程中,你可以设置断点。
哎呀呀,这断点可太重要啦!就好比你在代码的道路上放置了一个个小标记,当程序运行到这里的时候,就会停下来,等你去查看。
这多方便呀,就像你在路上走,突然看到一个有趣的地方,就停下来好好瞧瞧。
还有哦,你可以查看变量的值。
这就像你在这个代码世界里,能清楚地看到每个宝藏的具体模样。
你可以知道这个变量现在是什么状态,是不是符合你的预期。
当程序暂停在断点处时,你可以一步步地执行代码。
这感觉就像是你小心翼翼地在代码的小道上往前走,每一步都看得清清楚楚。
你可以看到每一行代码是怎么影响程序的运行的。
你想想,这多神奇呀!就好像你能掌控整个代码的运行过程,让它按照你的意愿来走。
如果程序出了问题,你就能像侦探一样,通过 gdb 找到问题的根源。
比如说,程序突然崩溃了,别着急,用 gdb 来跟踪呀!看看是在哪一行代码出了岔子,是哪个变量的值变得不对劲了。
这不就像是在黑暗中找到了那一丝光亮吗?而且哦,gdb 还能帮你查看函数的调用栈。
这就像是你能看到整个程序的运行轨迹,从一个函数跳到另一个函数,就像在一个复杂的迷宫中找到正确的路径。
总之呢,gdb 跟踪调试程序就像是一场刺激的冒险。
你要勇敢地面对代码世界里的各种挑战,利用好 gdb 这个神奇的工具。
所以呀,朋友们,别害怕遇到程序中的问题,拿起 gdb 这个法宝,大胆地去探索吧!让我们在代码的海洋里畅游,找到那些隐藏的宝藏,解决那些看似棘手的问题。
相信我,一旦你掌握了 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++抛出的异常。
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后产生的文件。