`
jiangwenfeng762
  • 浏览: 288200 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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
退出gdb 
reverse-search
在源文件中反向搜索正规表达式 
run
执行该程序 
search
在源文件中搜索正规表达式 
set variable
给变量赋值 
signal
将一个信号发送到正在运行的进程 
step
执行下一个源程序行,必要时进入下一个函数 
undisplay display
命令的反命令,不要显示表达式 
until
结束当前循环 
up
上移栈帧,使另一函数成为当前函数 
watch
在程序中设置一个监测点(即数据断点) 
whatis
显示变量或函数类型 

 

一个例子

 

******gdb 使用范例************************ 
----------------- 
清单 一个有错误的 C 源程序 bugging.c 
代码

----------------- 
1
 #i nclude 

3
 static char buff [256]; 
4
 static char* string; 
5
 int main () 
6
 
7
   printf ("Please input a string: "); 
8
   gets (string);   
9
   printf ("\nYour string is: %s\n", string); 
10 } 


----------------- 
  上面这个程序非常简单,其目的是接受用户的输入,然后将用户的输入打印出来。该程序使用了一个未经过初始化的字符串地址 string,因此,编译并运行之后,将出现 Segment Fault 错误: 
$ gcc -o bugging -g bugging.c 
$ ./bugging 
Please input a string: asfd 
Segmentation fault (core dumped) 
为了查找该程序中出现的问题,我们利用 gdb,并按如下的步骤进行: 
1
.运行 gdb bugging 命令,装入 bugging 可执行文件; 
2
.执行装入的 bugging 命令 run; 
3
.使用 where 命令查看程序出错的地方; 
4
.利用 list 命令查看调用 gets 函数附近的代码; 
5
.唯一能够导致 gets 函数出错的因素就是变量 string。用print命令查看 string 的值; 
6
.在 gdb 中,我们可以直接修改变量的值,只要将 string 取一个合法的指针值就可以了,为此,我们在第8行处设置断点 break 8; 
7
.程序重新运行到第 8行处停止,这时,我们可以用 set variable 命令修改 string 的取值; 
8
.然后继续运行,将看到正确的程序运行结果。

 

如何调试正在运行的程序

 

 有时会遇到一种很特殊的调试需求,对当前正在运行的其它进程进行调试(正是我今天遇到的情形)。这种情况有可能发生在那些无法直接在调试器中运行的进程身上,例如有的进程 只能在系统启动时运行。另外如果需要对进程产生的子进程进行调试的话,也只能采用这种方式。GDB可以对正在执行的程序进行调度,它允许开发人员中断程序 并查看其状态,之后还能让这个程序正常地继续执行。 

     GDB提供了两种方式来调试正在运行的进程:一种是在GDB命令行上指定进程的PID,另一种是在GDB中使用“attach”命令。例如,开发人员可以先启动debugme程序,让其开始等待用户的输入。示例如下: 

#./debugme
            Enter a string to count words:



     接下去在另一个虚拟控制台中用下面的命令查出该进程对应的进程号: 

# ps -ax | grep debugme
            555 pts/1 S 0:00 ./debugme



     得到进程的PID后,就可以使用GDB对其进行调试了: 

# gdb debugme 555
            GNU gdb Red Hat Linux (5.3post-0.20021129.18rh)
            Attaching to program: /home/xiaowp/debugme, process 555
            Reading symbols from /lib/libc.so.6...done.
            ……



     在上面的输出信息中,以Attaching to program开始的行表明GDB已经成功地附加在PID555的进程上了。另外一种连接到其它进程的方法是先用file命令加载调试时所需的符号表,然后再通过“attaché”命令进行连接: 

(gdb) file /home/xiaowp/debugme
            Reading symbols from /home/xiaowp/debugme...done.
            (gdb) attach 555
            ……



     如果想知道程序现在运行到了哪里,同样可以使用“backtrace”命令。当然也可以使用“step”命令对程序进行单步调试。 

     在完成调试之后,不要忘记用detach命令断开连接,让被调试的进程可以继续正常运行。

 

转自:http://hi.baidu.com/brady_home/blog/item/6b92aa8ffdfee2e6f01f369b.html

分享到:
评论

相关推荐

    gdb手册debuging with gdb 中文

    ### GDB手册知识点详解 #### 一、GDB简介与手册背景 GNU调试器(GDB)是一款功能强大的源码级调试工具,适用于多种编程语言,包括但不限于C、C++等。该手册针对的是GDB的第六版,版本号为6.8.50.20090706,提供了...

    gdb完全手册.pdf.zip_GDB pdf_GDB中文手册_gdb_linux_linux gdb pdf

    GDB(GNU Debugger)是GNU项目的一个组成部分,是一款强大的源代码级调试器,适用于C、C++、Fortran、Objective-C、Python等语言。这款工具允许程序员在运行代码时检查程序的状态,包括变量值、内存区域、调用堆栈等...

    GDB.zip_debugger_gdb debgger保存_gdb调试_gnu debugger

    《深入理解GDB:GNU调试器的探索与实践》 GDB,全称为GNU Debugger,是开源社区GNU项目的一部分,专为Unix类操作系统设计的一款强大的源代码级调试工具。无论你是初学者还是经验丰富的开发者,GDB都能提供必要的...

    gdb11.1 gdb9.2 无法读取clang dwarf

    在IT行业中,`gdb`(GNU Debugger)是一款强大的源代码级调试器,用于调试C、C++等语言编译的程序。`dwarf`是编译器在编译过程中生成的一种元数据格式,用于存储关于源代码的信息,如变量、函数、类型等,方便调试...

    gdb64.exe和gdb.exe

    GDB(GNU Debugger)是GNU项目的一个开源工具,用于调试C、C++和其他语言编写的程序。在给定的压缩包中,包含了两个版本的GDB:`gdb64.exe`和`gdb.exe`。`gdb64.exe`是64位版本的GDB,用于调试64位应用程序,而`gdb....

    Linux下GDB的移植

    Linux下GDB的移植 GDB是GNU开放源代码的调试器,广泛应用于Linux系统中。为了在Linux下进行程序调试,需要将GDB移植到目标平台上。本文将详细介绍GDB的移植步骤,包括准备工作、编译ncurses、编译GDB、测试等环节。...

    GDB调试手册(中文版)

    GDB调试手册是一份非常适合初学者的中文资源,它详尽地介绍了如何使用GDB这一强大的开源调试工具。GDB,全称GNU调试器,是Linux和其他类Unix系统下用于调试C、C++、Objective-C、Fortran等语言编写的程序的工具。...

    ubuntu20.04对应的gdb安装包

    在Ubuntu 20.04操作系统中,GDB(GNU调试器)是一个至关重要的工具,尤其对于软件开发者和系统管理员来说。它是一个源代码级别的调试器,允许用户检查和调试运行中的程序,查找并修复代码错误。这个"ubuntu20.04-gdb...

    GDB完全中文书册

    ### GDB调试工具详解 #### 一、GDB概述与特点 **GDB**(GNU Debugger)是由GNU项目提供的一款强大且免费的程序调试工具,主要用于UNIX及其衍生系统(如Linux)上的软件开发。尽管现代集成开发环境(IDE)如Visual ...

    gdb.exe文件

    标题中的“gdb.exe文件”指的是GNU Debugger的可执行文件,它是开源的C、C++以及其他语言的调试工具。在编程过程中,特别是进行低级别调试或优化代码时,GDB是一个不可或缺的工具。它允许程序员设置断点、单步执行...

    GDB调试器(gdb-7.0.2)

    GDB调试器(gdb-7.0.2)是一款由GNU开源组织提供的强大调试工具,主要用于在UNIX系统以及类似环境中调试C和C++程序。它具有丰富的功能,可以帮助开发者定位并解决代码中的错误,提高软件开发的效率和质量。在Windows...

    包括gdb64.exe和gdb.exe

    GDB,全称为GNU调试器(GNU Debugger),是开源社区GNU项目的一部分,是一个强大的命令行工具,用于调试C、C++、Fortran等语言编写的程序。它允许开发者在程序运行时检查和控制程序状态,如查看内存变量、设置断点、...

    Linux GDB调试文档

    在Linux开发环境中,GDB(GNU调试器)是进行源码级调试的重要工具,尤其适用于C/C++语言编程。其全称为"The gnu Source-Level Debugger",是GNU项目的一部分。随着版本*.*.*.**的发布,GDB不仅保持了其作为源码级...

    GDB安装步骤,详细步骤

    GDB(GNU调试器)是Linux环境下用于C、C++等编程语言的开源调试工具,它可以帮助开发者在程序运行过程中检查变量状态、设置断点、单步执行代码,从而定位和修复程序中的错误。以下是对GDB安装的详细步骤解析: 1. *...

    gdb-multiarch 14.2 windows更新版本,增加gdb服务,支持python3

    GDB(GNU Debugger)是一款强大的源代码级调试器,用于检查和调试C、C++以及许多其他编程语言的程序。GDB-Multiarch是其扩展版本,特别设计用于支持多种架构,包括ARM、RISC和X86等。在GDB-Multiarch 14.2的Windows...

    GDB查找内存泄露

    GDB(GNU Debugger)是一个强大的调试工具,能够帮助开发者在C/C++等语言的程序中查找和定位内存泄露的问题。下面将详细介绍如何使用GDB来查找和分析内存泄露。 首先,内存泄露通常发生在动态分配的内存没有被正确...

    gdb调试 rk可运行程序

    GDB(GNU Debugger)是一款强大的源代码级调试器,广泛应用于Linux和其他Unix-like操作系统中,用于调试C、C++以及其他支持的编程语言编译出的程序。在这个场景中,我们将聚焦于如何使用GDB来调试基于ARM AArch64...

    GDB使用手册(中文版)

    **GDB使用手册(中文版)** GDB(GNU调试器)是开源世界中最常用的调试器之一,尤其在Linux环境中,它为C、C++、Fortran等编程语言提供了强大的调试支持。本手册将深入介绍如何有效地利用GDB进行程序调试,帮助开发者...

    Linux绿色gdb,无需安装,支持c++对象

    Linux中的GDB(GNU调试器)是一款强大的源代码级调试工具,主要用于C和C++程序。这个绿色版的GDB意味着它是一个便携式的版本,无需通过编译或配置系统级别的安装过程,用户可以直接在指定目录下运行。这使得在不同...

    virtual gdb vs2022可用

    标题“virtual gdb vs2022可用”表明讨论的主题是关于Visual Studio 2022 (VS2022) 集成的一种虚拟GDB(GNU Debugger)工具的可用性。GDB是一款强大的源代码级调试器,广泛用于C、C++和其他语言的调试,而"virtual ...

Global site tag (gtag.js) - Google Analytics