GDB使用手册

合集下载

gdb技术手册(中文版)

gdb技术手册(中文版)

gdb技术手册(中文版)2-12008-11-13 19:20:59| 分类:学习资料| 标签:|字号大中小订阅gdb技术手册(中文版)2 (2008-10-29 20:34:21)标签:杂谈一、查看源程序一、显示源代码GDB可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。

不然就看不到源程序了。

当程序停下来以后,GDB会报告程序停在了那个文件的第几行上。

你可以用list命令来打印程序的源代码。

还是来看一看查看源代码的GDB命令吧。

list<linenum>;显示程序第linenum行的周围的源程序。

list<function>;显示函数名为function的函数的源程序。

list显示当前行后面的源程序。

list -显示当前行前面的源程序一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数。

set listsize <count>;设置一次显示源代码的行数。

show listsize查看当前listsize的设置。

list命令还有下面的用法:list<first>;,<last>;显示从first行到last行之间的源代码。

list ,<last>;显示从当前行到last行之间的源代码。

list +往后显示源代码。

一般来说在list后面可以跟以下这们的参数:<linenum>; 行号。

<+offset>; 当前行号的正偏移量。

<-offset>; 当前行号的负偏移量。

<filename:linenum>; 哪个文件的哪一行。

<function>; 函数名。

<filename:function>;哪个文件中的哪个函数。

gdb使用手册

gdb使用手册

gdb使用手册摘要:1.GDB 简介2.GDB 的基本功能3.GDB 的安装与配置4.GDB 的基本使用方法5.GDB 的高级功能6.GDB 的常见问题与解答正文:【GDB 简介】GDB(GNU Debugger)是一款功能强大的调试工具,主要用于C/C++程序的调试。

GDB 可以帮助程序员查找代码中的错误,理解程序运行时的状态,并对程序进行性能分析。

GDB 作为GNU 计划的一部分,遵循GPL 协议,是开源的软件。

【GDB 的基本功能】GDB 主要包括以下基本功能:1.断点设置:可以在程序中设置断点,使程序在执行到断点时暂停。

2.运行控制:可以控制程序的运行,包括继续执行、单步执行、跳过函数调用等。

3.变量查看:可以查看程序运行时的变量值,包括全局变量、局部变量和栈上的临时变量。

4.函数调用栈查看:可以查看程序运行时的函数调用栈。

5.内存管理:可以分析程序的内存使用情况,查找内存泄漏等问题。

【GDB 的安装与配置】GDB 的安装相对简单,一般可以通过操作系统的包管理器进行安装。

以Ubuntu 系统为例,可以使用以下命令安装GDB:```sudo apt-get install gdb```安装完成后,需要配置GDB 的环境变量,将GDB 的安装路径添加到PATH 环境变量中。

具体操作如下:```export PATH=$PATH:/usr/local/gdb```【GDB 的基本使用方法】GDB 的基本使用方法如下:1.启动GDB:在终端中输入“gdb”命令,然后回车。

2.载入程序:使用“file”命令载入需要调试的程序。

例如:“file/path/to/your/program”。

3.设置断点:使用“break”命令在指定位置设置断点。

例如:“break main”。

4.运行程序:使用“run”命令开始运行程序。

此时,程序会在设置断点的位置暂停。

5.查看变量:使用“print”命令查看变量值。

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用户指南说明书

Table of ContentsAbout1 Chapter 1: Getting started with GDB2 Remarks2 Examples2 What is GDB?2 Starting GDB2 Working with a Core File3 Credits5AboutYou can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: gdbIt is an unofficial and free GDB ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official GDB.The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners.Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to ********************Chapter 1: Getting started with GDBRemarksGDB (GNU Project debugger) is a command line base debugger that is good at analyzing running and cored programs. According to the user manual GDB supports C, C++, D, Go, Objective-C, Fortran, Java, OpenCL C, Pascal, Rust, assembly, Modula-2, and Ada.GDB has the same feature set as most debuggers but is different from most that I have used in that is all based on typing commands instead of clicking on GUI elements. Some of these features include:•Setting break points•Printing the value of variables.•Setting the value of variables to test things out.•Viewing the stackExamplesWhat is GDB?GDB, short for GNU Debugger, is the most popular debugger for UNIX systems to debug C and C++ programs. GNU Debugger, which is also called gdb, is the most popular debugger for UNIX systems to debug C and C++ programs.GNU Debugger helps you in getting information about the following:•If a core dump happened, then what statement or expression did the program crash on?•If an error occurs while executing a function, what line of theprogram contains the call to that function, and what are theparameters?•What are the values of program variables at a particular point during execution of theprogram?•What is the result of a particular expression in a program?Starting GDBTo start GDB, in the terminal,gdb <executable name>For the above example with a program named main, the command becomesgdb mainSetting BreakpointsYou'll probably want you program to stop at some point so that you can review the condition of your program. The line at which you want the program to temporarily stop is called the breakpoint. break <source code line number>Running your programTo run your program, the command is, as you guessed,runOpening a coregdb -c coreFile pathToExecutableWorking with a Core FileCreated this really bad program#include <stdio.h>#include <ctype.h>// forward declarationsvoid bad_function(){int *test = 5;free(test);}int main(int argc, char *argv[]){bad_function();return 0;}gcc -g ex1.c./a.out //or whatever gcc createsSegmentation fault (core dumped)gdb -c core a.outCore was generated by `./a.out'.Program terminated with signal SIGSEGV, Segmentation fault. #0 __GI___libc_free (mem=0x5) at malloc.c:2929 2929 malloc.c: No such file or directory.(gdb) where#0 __GI___libc_free (mem=0x5) at malloc.c:2929 #1 0x0000000000400549 in bad_function () at ex1.c:12 #2 0x0000000000400564 in main (argc=1, argv=0x7fffb825bd68) at ex1.c:19Since I compiled with -g you can see that calling where tells me that it didn't like the code on line 12 of bad_function()Then I can examine the test variable that I tried to free(gdb) up#1 0x0000000000400549 in bad_function () at ex1.c:12 12 free(test);(gdb) print test$1 = (int *) 0x5(gdb) print *testCannot access memory at address 0x5In this case the bug is pretty obvious I tried to free a pointer that was just assigned the address 5 which wasn't created by malloc so free has no idea what to do with it.Read Getting started with GDB online: https:///gdb/topic/4964/getting-started-with-gdbCredits。

GDB 命令参考手册

GDB 命令参考手册
报告你进程的一般状态信息。如果进程停止了。这个报告还包括停止的原因和收到的信号
info proc all
显示上面proc命令这些命令返回的所有信息
quit
q
退出调试程式
frame
shell
shell ls
执行shell命令
make
不退出gdb而重新编译生成可执行文件
disassemble
显示反汇编代码
thread
thread thread_no
用来在线程之间的转换
set
set width 70
就是把标准屏幕设为70列
set var=54
设置变量的值。
forward/search
search string
从当前行向后查找匹配某个字符串的程式行
reverse-search
forward/search相反,向前查找字符串。使用格式同上
up/down
上移/下移栈帧,使另一函数成为当前函数
暂停,步进时自动显示表达式的值
finish
执行直到函数返回 执行直到当前stack返回数返回
where
命令用来查看执行的代码在什么地方中止
backtrace
bt
显示函数调用得所有栈框架(stack frames)的 踪迹和当前函数的参数的值。
watch
w
w exp
监视表达式的值
kill
k
k
结束当前调试的程式
print
p
p exp
打印表达式的值
p/fmt exp
fmt为以下值

GDB手册中文版(部分)

GDB手册中文版(部分)

GDB手册中文版(部分)GDB用户手册目录目录 (1)摘要 (2)自由软件 (2)自由软件急需自由文档 (3)GDB的贡献者们 (4)1.一个简单的GDB会话 (8)2.征服GDB的进与出 (13)2.1调用GDB (13)2.1.1 选择文件 (15)2.1.2 选择模式 (16)2.1.3 启动期间, GDB做了什么 (19)2.2 退出GDB (20)2.3 Shell命令 (21)2.4 Loging输出 (21)3. GDB命令 (23)3.1命令语法 (23)3.2命令完成 (24)3.3获得帮助 (26)4.在GDB下运行程序 (30)4.1 适合调试的编译 (30)4.2 启动程序 (31)4.3 程序的参数 (33)4.4 程序的环境 (34)4.5 程序的工作目录 (35)4.6 程序的输入输出 (36)4.7 调试某个已运行的进程 (37)4.8 杀掉子进程 (38)4.9 多线程程序的调试 (38)4.10 多进程程序的调试 (41)5.0停止与继续 (43)5.1 断点、观察点和捕捉点 (43)5.1.1 设置断点 (45)摘要象GDB这样的调试程序,目的就是让你可以查看其它程序的内部运行过程,或者是在它崩溃的那一时刻它在做什么。

GDB能做4件事(这些还需附加其他的一些事),帮助你捕获在场的错误:·启动程序,设定任何可以影响它行为的东西。

·在特定的条件下使程序停止。

·当程序停止时,分析发生了什么。

·改变程序里的一些东西,进行一个由于bug所导致的结果的矫正性试验,同时继续了解另外一个bug。

可以使用GDB调试用C和C++编写的程序,更多信息参见支持的语言,及C与C++。

部分支持Modula-2,Modula-2的更多信息参见Modula-2。

在调试使用sets、subranges、file variables或嵌套函数的Pascal程序时,目前不能工作。

gdb使用手册

gdb使用手册

gdb使用手册摘要:一、GDB 简介1.GDB 的定义2.GDB 的作用二、GDB 的安装与配置1.安装GDB2.配置GDB三、GDB 的基本使用1.启动GDB2.调试程序3.控制程序执行4.查看程序状态四、GDB 的高级功能1.断点调试2.单步执行3.查看变量值4.修改变量值5.控制台输出6.退出GDB正文:GDB(GNU Debugger)是一个用于调试程序的强大工具。

它支持C、C++等语言,可以通过命令行或图形界面进行操作。

GDB 可以帮助程序员找到程序中的错误,并能够对程序进行调试、测试和优化。

一、GDB 简介GDB 是一个功能强大的调试器,主要用于调试C、C++等语言编写的程序。

它可以让程序员在程序运行过程中观察程序的内部状态,设置断点,单步执行代码等,以便找到程序中的错误。

二、GDB 的安装与配置1.安装GDB:GDB 通常与编译器一起安装,例如,使用GCC 编译器时,可以通过以下命令安装GDB:`sudo apt-get install gdb`。

2.配置GDB:在使用GDB 之前,可能需要对GDB 进行一些配置,例如设置编译器的路径、添加新的调试符号等。

可以使用`gdb-config`命令进行配置。

三、GDB 的基本使用1.启动GDB:使用`gdb`命令启动GDB,并指定要调试的程序。

例如:`gdb my_program`。

2.调试程序:在GDB 中,可以使用`run`命令开始运行程序。

程序将暂停在第一个断点处,此时可以查看程序的状态,例如变量值、内存地址等。

3.控制程序执行:在GDB 中,可以使用`next`、`step`、`continue`等命令控制程序的执行。

`next`命令会执行当前行的下一行代码,`step`命令会执行当前行的所有代码,`continue`命令会继续执行程序,直到遇到断点或程序结束。

4.查看程序状态:在GDB 中,可以使用`print`、`display`、`backtrace`等命令查看程序的状态。

GDB使用手册(中文版)

GDB使用手册(中文版)

GDB 4.16, Copyright 1995 Free Software Foundation, Inc... (gdb) (gdb)是提示符,在这提示符下可以输入命令,直到退出。(退出命令是 q/Q) 为了尽量和原文档说明的命令相符,即使在本例子中没用的命令我也将演示。
首先我们可以设置 gdb 的屏幕大小。键入: (gdb)set width 70
* 数据:
检查数据
* 语言:
用不同的语言来使用 GDB
* 符号:
检查符号表
* 更改:
更改执行
* GDB 的文件
文件
* 对象 * 控制 GDB * 执行序列: * Emacs: * GDB 的 bug: * 命令行编辑: * 使用历史记录交互: * 格式化文档: * 安装 GDB :
指定调试对象 控制
执行一序列命令 使 GDB 和 Emacs 一起工作
行编辑
如何格式化和打印 GDB 文档
* 索引:
GDB 简介: **************
调试器(比如象 GDB)能让你观察另一个程序在执行时的内部活动,或程序出错时 发生了什么。
GDB 主要能为你做四件事(包括为了完成这些事而附加的功能),帮助你找出程序 中的错误。
Richard Stallman 是 GDB 的始作俑者,另外还有许多别的 GNU 的成员。许多人
为此作出了贡献。(都是老外不提也罢,但愿他们不要来找我麻烦:-))
这里是 GDB 的一个例子: 原文中是使用一个叫 m4 的程序。但很遗憾我找不到这个程序的原代码,
所以没有办法来按照原文来说明。不过反正是个例子,我就拿一个操作系统的 进程调度原码来说明把,原代码我会附在后面。
Fundamentally, the General Public License is a license which says that you have these freedoms and that you cannot take these freedoms away from anyone else. GDB 的作者:

GDB中文手册

GDB中文手册

GDB中文手册/****************************************************/GDB 用调试程序GDB 2概述GDB 5使用GDB UNIX shell 8中运行的程序GDB 8在中运行程序 9调试已运行的程序两种方法: / 9暂停恢复程序运行BreakPoint 9一、设置断点()WatchPoint 10二、设置观察点()CatchPoint 10三、设置捕捉点() 11四、维护停止点 12五、停止条件维护 12六、为停止点设定运行命令 13七、断点菜单 13八、恢复程序运行和单步调试Signals 14九、信号()Thread Stops 15十、线程() 16查看栈信息 18查看源程序 18一、显示源代码 19二、搜索源代码 19三、指定源文件的路径 20四、源代码的内存 21查看运行时数据 21一、表达式 21二、程序变量 22三、数组 23四、输出格式 23五、查看内存 24六、自动显示 25七、设置显示选项GDB 25中关于显示的选项比较多,这里我只例举大多数常用的选项。

27八、历史记录GDB 28九、环境变量 28十、查看寄存器 29改变程序的执行 29一、修改变量值 29二、跳转执行 30三、产生信号量 30四、强制函数返回 30五、强制调用函数GDB 31在不同语言中使用 32后记 1 第页GDB概述是开源组织发布的一个强大的下的程序调试工具。

或许,各位比较喜欢那种GDB GNU UNIX图形界面方式的,像、等的调试,但如果你是在平台下做软件,你会发现VC BCB IDE UNIX这个调试工具有比、的图形化调试器更强大的功能。

所谓寸有所长,尺有所短GDB VC BCB“”就是这个道理。

一般来说,主要帮忙你完成下面四个方面的功能:GDB1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。

gdb使用手册

gdb使用手册

gdb使用手册(原创版)目录1.GDB 简介2.GDB 基本功能3.GDB 使用流程4.GDB 常见命令5.GDB 高级特性6.GDB 未来发展正文1.GDB 简介GDB(GNU Debugger)是一款功能强大的调试工具,主要用于 C/C++程序的调试。

GDB 提供了丰富的调试功能,可以帮助程序员定位问题、分析程序运行状态,从而有效地提高软件质量和开发效率。

2.GDB 基本功能GDB 的基本功能包括:设置断点、单步执行、步进执行、查看变量值、运行时查看内存信息、调试线程等。

通过这些功能,程序员可以深入了解程序运行过程中的各种信息,找出潜在的问题。

3.GDB 使用流程GDB 的使用流程主要包括以下几个步骤:(1)启动 GDB:使用“gdb”命令启动 GDB,然后载入需要调试的程序。

(2)设置断点:在需要设置断点的代码位置使用“break”命令。

(3)运行程序:使用“run”命令开始运行程序。

(4)调试过程:根据需要使用 GDB 提供的命令,如“next”、“step”、“continue”等,控制程序的执行流程。

(5)退出 GDB:调试完成后,使用“quit”命令退出 GDB。

4.GDB 常见命令GDB 提供了众多命令以满足不同调试需求,以下是一些常见的 GDB命令:(1)设置断点:break、break-set-file、break-set-function。

(2)控制程序执行:run、continue、step、next、step-over、step-into、step-out。

(3)查看程序状态:print、display、list、backtrace。

(4)操作内存:malloc、free、print-memory-usage。

(5)调试线程:thread-create、thread-join、thread-switch。

5.GDB 高级特性GDB 还提供了一些高级特性,如:(1)远程调试:通过远程调试,程序员可以在一台机器上调试另一台机器上的程序。

GDB使用手册

GDB使用手册

五、断点的管理
1.显示当前 gdb 的断点信息: (gdb) info break 他会以如下的形式显示所有的断点信息: 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 删除指定的某个断点: (gdb) delete breakpoint 1
十一、用 GDB 调试程序
从上面看来, GDB 和一般的调试工具没有什么两样,基本上也是完成这些功能,不过 在细节上,你会发现 GDB 这个调试工具的强大,大家可能比较习惯了图形化的调试工具, 但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。 源程序: tst.c 1 #include 2 3 int func(int n) 4{ 5 int sum=0,i; 6 for(i=0; i 7{ 8 sum+=i; 9} 10 return sum;
GDB 使用手册
(转自 /view/639266.htm)
GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜 欢那种图形界面方式的,像 VC、BCB 等 IDE 的调试,但如果你是 在 UNIX 平台下做软 件,你会发现 GDB 这个调试工具有比 VC、BCB 的图形化调试器更强大的功能。所谓 “寸有 所长,尺有所短 ”就是这个道理。 一般来说,GDB 主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。

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中文手册

GDB中文手册

使用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启动GDB的方法有以下几种:1、gdb programprogram也就是你的执行文件,一般在当然目录下。

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

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

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

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

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

我在下面只例举一些比较常用的参数:参数说明-symbols [file](-s)读取文件中的符号表-exec [file] (-e)调试一个可执行文件-se [file]上二者的缩写-core [file](-c)读入一个core dump文件-pid number (-p)启动attach模式,除错一个执行中的行程。

number 是目标行程的pid-directory [directory] (-d)将directory加入原始码的搜寻路行-readnow (-r)一次读取完所有的符号表,这会让启动gdb的时间变长,但在执行往后的除错动作会较快速。

下列还有部分选择性的参数,我列出几个目前用的到的:-quiet -silent -q安静模式,启动时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使用手册摘要:1.GDB 简介2.GDB 的基本组成3.GDB 的使用方法4.GDB 的高级功能5.总结正文:1.GDB 简介GDB(GNU Debugger)是一款强大的调试工具,主要用于C/C++程序的调试。

GDB 可以帮助程序员查找代码中的错误,理解程序的执行过程,并对程序进行性能分析。

2.GDB 的基本组成GDB 主要由以下几个部分组成:(1)调试器:GDB 的核心部分,用于控制调试过程。

(2)服务器:负责与被调试程序进行通信,收集运行时的信息。

(3)命令:GDB 提供了丰富的命令,用于控制调试过程,如设置断点、单步执行、查看变量值等。

(4)调试脚本:记录调试过程中的操作,可以自动化执行一系列命令。

3.GDB 的使用方法使用GDB 进行调试的基本步骤如下:(1)启动GDB:在终端中输入“gdb”并回车,进入GDB 界面。

(2)载入程序:使用“file”命令载入需要调试的程序。

(3)设置断点:使用“break”命令在指定位置设置断点。

(4)运行程序:使用“run”命令开始执行程序。

(5)单步执行:使用“next”或“step”命令让程序执行到下一个断点或执行当前行的代码。

(6)查看变量值:使用“print”或“display”命令查看变量值。

(7)退出GDB:使用“quit”命令退出GDB。

4.GDB 的高级功能GDB 还提供了许多高级功能,如:(1)监视变量:使用“watch”命令实时查看变量的变化。

(2)执行子程序:使用“exec”命令执行子程序。

(3)控制程序执行:使用“continue”命令让程序继续执行,直到遇到下一个断点;使用“stop”命令让程序立即停止执行。

(4)设置断点条件:使用“break”命令设置条件断点,如:当某个变量的值发生变化时暂停程序。

(5)查看堆栈信息:使用“backtrace”或“bt”命令查看当前堆栈的调用情况。

5.总结GDB 是一款功能强大的调试工具,可以帮助程序员更加高效地查找和修复程序中的问题。

gdb使用指南

gdb使用指南

1.概论我们将学习使用gdb来调试通过一个通过串行线同PC相连的嵌入式系统.Gdb可以调试各种程序,包括C、C++、JA V A、PASCAL、FORAN和一些其它的语言。

包括GNU所支持的所有微处理器的汇编语言。

在gdb的所有可圈可点的特性中,有一点值得注意,就是当运行gdb的平台(宿主机)通过串行端口(或网络连接,或是其他别的方式)连接到目标板时(应用程序在板上运行),gdb 可以调试对应用程序进行调试。

这个特性不光在将GNU工具移植到一个新的操作系统或微处理器时侯很有用,对于那些使用GNU已经支持的芯片的嵌入式系统进行开发的设计人员来讲,也是非常有用的。

当gdb被适当的集成到某个嵌入式系统中的时候,它的远程调试功能允许设计人员一步一步的调试程序代码、设置断点、检验内存,并且同目标交换信息。

Gdb同目标板交换信息的能力相当强,胜过绝大多数的商业调试内核,甚至功能相当于某些低端仿真器。

2. Gdb在嵌入式领域的功能实现当调试一个远端目标设备时,gdb依靠了一个调试stub来完成其功能。

调试stub 即是嵌入式系统中一小段代码,它提供了运行gdb的宿主机和所调试的应用程序间的一个媒介。

Gdb和调试stub通过GDB串行协议进行通信。

GDB串行协议是一种基于消息的ASCII码协议,包含了诸如读写内存、查询寄存器、运行程序等命令。

由于绝大多数嵌入式系统设计人员为了最好的利用他们手中特定的硬件的特征,总是自己编写自己的stub。

所以我们有必要清楚的了解一下gdb的串行通信协议。

在后面我们会详细介绍。

为了设置断点,gdb使用内存读写命令,来无损害地将原指令用一个TRAP命令或其它类似的操作码(在此假定,被调试的应用程序是处在RAM中的,当然,如果stub 有足够好的性能,硬件也不错的话,这个条件也不是必须的)代替,使得执行该命令时,可以使得控制权转移到调试stub手中去。

在此时,调试stub的任务就是将当前场景传送给gdb (通过远程串行通信协议),然后从gdb处接收命令,该命令告诉了stub下一步该做什么。

gdb使用手册

gdb使用手册

gdb使用手册【实用版】目录1.GDB 简介2.GDB 的基本组成3.GDB 的使用方法4.GDB 的常用命令5.GDB 的高级功能6.总结正文1.GDB 简介GDB(GNU Debugger)是一款功能强大的调试器,主要用于调试 C/C++程序。

GDB 具有丰富的功能,可以满足各种调试需求。

在开源软件领域,GDB 被广泛应用于程序开发和维护过程中。

2.GDB 的基本组成GDB 主要由以下几个部分组成:(1)调试器核心:提供基本的调试功能,如设置断点、单步执行等。

(2)调试器前端:与用户交互,接收用户输入的调试命令。

(3)调试器后端:与被调试程序交互,传递调试器核心发出的命令,并反馈执行结果。

(4)调试器驱动:负责与具体编程语言和编译器接口,实现对被调试程序的支持。

3.GDB 的使用方法使用 GDB 进行程序调试的基本步骤如下:(1)编写调试脚本:在 GDB 中设置断点、观察变量等,需要使用 GDB 命令编写调试脚本。

(2)编译程序:使用编译器编译待调试程序,同时需要添加适当的调试选项,如-g(GCC)或-O(Oracle C)。

(3)运行 GDB:在命令行中输入“gdb”命令,启动 GDB。

(4)载入程序:在 GDB 中输入载入命令,如“file”,指定待调试程序的路径。

(5)开始调试:使用 GDB 的各种命令,如设置断点、单步执行、观察变量等,对程序进行调试。

4.GDB 的常用命令GDB 提供了丰富的命令来满足调试需求,以下是一些常用的 GDB 命令:(1)run:开始执行程序。

(2)next:执行下一行代码,进入函数内部。

(3)step:执行当前行代码,进入函数内部。

(4)continue:继续执行程序,直到遇到下一个断点或程序结束。

(5)backtrace:查看当前函数调用栈。

(6)print:观察变量值。

(7)break:设置断点。

(8)set:设置调试选项,如设置变量值、修改代码等。

GDB使用说明

GDB使用说明

GDB调试说明---- SeaSon from DB-LAB of HIT安装篇下面介绍的方法是以在cygwin中安装gdb为例说明。

1. 重新运行cygwin的setup文件,选择界面中的keep(必须!!!否则会死的很惨的),从列表中选择gdb组件,然后选择安装即可。

2. 修改Makefile,添加调试信息修改Makefile(注意:修改的是没有任何后缀的文件,不是Makefile.vc或者Makefile.in)在下面位置添加-gCCOPT = -g //这后面可能还有其他参数,保留即可3. 接着需要重新编译NS2进入ns-2.2* 目录下面执行make clean接着make depend # 执行这个命令过程中如出错,不用管!然后make如果上面过程中没有错误,则恭喜你安装成功:)如果要使用图形界面,则安装过程中需要安装tcltk库,然后对于2003(以前的有些版本页可以)以后的默认都回安装图形界面调试工具insight。

后面的说明都是基于命令行界面的,适用比较稳定、方便。

常用命令1. 进入gdb调试状态,在Cygwin窗口或者Xwin窗口输入命令gdb ns,如下图所示:2.设置断点命令格式<gdb> b :112,下图即在的第112行设置一个断点其中<gdb> 为命令提示符b设置端点命令 调试的文件,Ns2中任何一个C++文件都可以进行调试“:”行数指示符112为行号当然设置断点的格式还有其他,具体参见手册。

3. 删除断点命令格式:<gdb>d b 2其中d为deleteb为breakpoints2为断点的编号利用2.中的方法继续创建断点2、3。

利用命令d b 1即删除第一个断点(Breakpoint 1 at 0x4e0a9d: file aodv/, line 112.),如下图所示4.运行脚本命令格式:r scrip.tcl其中r为命令scrip.tcl为脚本以ns自带的wireless1.tcl为例,我们首先在的recv函数开始设置端点如下图所示:运行测试脚本wireless.tcl,如下图所示:然后程序在断点位置停止,如下图所示:5. 显示变量或函数值命令格式:display var其中var可以为变量名或者函数名在recv()函数的端点处我们想要查看数据包的源地址,即利用下列命令display ih->saddr()结果如下图所示,即数据包源地址为0,目的地址为2.6. 删除变量或函数值显示命令格式:d d 1其中d---deletedisplayd---变量编号1---使用命令”d d 1”即删除第一个变量显示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在执行 symbol-file 一次之后,如果按下回车键,它并不会重复执行。
When GDB is configured for a particular environment, it understands debugging information in whatever format is the standard generated for that environment; you may use either a GNU compiler, or other compilers that adhere to the local conventions. Best results are usually obtained from GNU compilers; for example, using gcc you can generate debugging information for optimized code.
从 filename 中读符号表信息。同样地根据需要查找 PATH。使用 file 命令从同一文件得到符号表和要运行的程序。
symbol-file with no argument clears out GDB information on your program's symbol table.
symbol-file 没有参数时,清除 GDB 中的程序的符号表信息。
The symbol-file command causes GDB to forget the contents of some breakpoints and auto-display expressions. This is because they may contain pointers to the internal data recording symbols and data types, which are part of the old symbol table data being discarded inside GDB.
file
file with no argument makes GDB discard any information it has on both executable file and the symbol table.
没有参数的 file 使 GDB 丢弃可执行程序和符号表中的任何信息。
有时候需要在 GDB 的会话过程中改变为一个不同的文件。或者你可能在运行 GDB 后,忘记指定你想要的文件。或者你是在通过 gdbserver 调试一个远程目标(请看段“文件”)。在这些情况下,用于指定新文件的 GDB 命令就变得很有用了。
file filename
Use filename as the program to be debugged. It is read for its symbols and for the contents of pure memory. It is also the program executed when you use the run command. If you do not specify a directory and the file is not found in the GDB working directory, GDB uses the environment variable PATH as a list of directories to search, just as the shell does when looking for a program to run. You can change the value of this variable, for both GDB and your program, using the path command.
two-stage 的读取策略是让GDB启动更快。在多数情况下,当一个源文件的符号表细节信息被读取的时候,存在一定的暂停。(set verbose 命令可以让这些暂停显示需要的信息,请看段“可选的警告和消息”)
We have not implemented the two-stage strategy for COFF yet. When the symbol table is stored in COFF format, symbol-file reads the symbol table data in full right away. Note that "stabs-in-COFF" still does the two-stage strategy, since the debug info is actually in stabs format.
GDB Manual 15 1
15.1 Commands to specify files 指定文件的命令
You may want to specify executable and core dump file names. The usual way to do this is at start-up time, using the arguments to GDB's start-up commands (see section Getting In and Out of GDB).
当 GDB 为一个特别的环境配置好后,它识别这一环境中产生的标准的不分格式的调试信息;你既可以使用一个 GNU 的编译器,也可以使用遵循本地习惯的编译器。最好的选择通常来自 GNU 的编译器;比如,使用 gcc 可以产生优化的代码的调试信息。
For most kinds of object files, with the exception of old SVR3 systems using COFF, the symbol-file command does not normally read the symbol table in full right away. Instead, it scans the symbol table quickly to find which source files and which symbols are present. The details are read later, one source file at a time, as they are needed.
你可以使用 file 命令在 GDB 中载入没有被链接的 ".o" 文件。你将不可能“运行”一个这样的对象文件,但是你可以反汇编函数和观察变量。同时,如果内在的 BFD 功能性地支持它,你可以使用这一技术用 gdb-write 给对象文件打上补丁。注意在这种情况下,GDB 既不能转换,也不能修改重定向表,所以函数分支和一些已初始化的变量看起来是呆在不合适的地方。但是这一特征将始终被保留,以备不时之需。
你可以指定可执文件和 core dump 文件的名称。通常的做法是在启动的时候,传递参数给启动 GDB 的命令(请看段“进入与退出 GDB”)
Occasionally it is necessary to change to a different file during a GDB session. Or you may run GDB and forget to specify a file you want to use. Or you are debugging a remote target via gdbserver (see section file). In these situations the GDB commands to specify new files are useful.
symbol-file 命令让 GDB 忘记一些断点和 auto-display 表达式的内容。这是因为他们可能包含指向内部数据 (记录符号和数据类型) 的指针(旧的被 GDB 放弃的符号表的一部分)。
symbol-file does not repeat if you press RET again after executing it once.
使用 filename 作为要调试的程序。它的符号表被读取,或者是单一的内存的内容。它也是你运行run命令时执行的程序。如果没有指定目录,这一文件也没有在 GDB 的工作目录中找到,GDB 将使用环境变量 PATH 作为要搜索的目录列表,就像 shell 查找要运行的程序一样。你可以改变这一变量的值,用于 GDB 和你的程序,请使用 path 命令。
exec-file [ filename ]
Specify that the program to be run (but not the symbol table) is found in filename. GDB searches the environment variable PATH if necessary to locate your program. Omitting filename means to discard information on the executable file.
指定在 filename 中找到的要运行的程序(不是符号表)。GDB 根据需要查找 PATH 变量以定位指定的程序。省略 filename 意味放弃可执行文件的信息。
symbol-file [ filename ]
Read symbol table information from file filename. PATH is searched when necessary. Use the file command to get both symbol table and program to run from the same file.
You can load unlinked object `.o' files into GDB using the file command. You will not be able to "run" an object file, but you can disassemble functions and inspect variables. Also, if the underlying BFD functionality supports it, you could use gdb -write to patch object files using this technique. Note that GDB can neither interpret nor modify relocations in this case, so branches and some initialized variables will appear to go to the wrong place. But this feature is still handy from time to time.
相关文档
最新文档