`
隐形的翅膀
  • 浏览: 497398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GDB 调试

 
阅读更多
http://wiki.ubuntu.org.cn/%E7%94%A8GDB%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F#.E8.AE.BE.E7.BD.AE.E8.A7.82.E5.AF.9F.E7.82.B9.EF.BC.88WatchPoint.EF.BC.89

rwatch i if i==5
watch i if i==3
c
print i
info b

step <count>
    单步跟踪,如果有函数调用,他会进入该函数

next <count>
    同样单步跟踪,如果有函数调用,他不会进入该函数

如果出现任何关于debuginfo-install的错误
cd /etc/yum.repon.d/
vi CentOS-Debuginfo.repo
set enable=1 in debug part
或者copy这个文件到没有CentOS-Debuginfo.repo文件的机器上


1. 启动GDB的方法有以下几种:

    gdb <program>

    program也就是你的执行文件,一般在当前目录下。

    gdb <program> core

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

    gdb <program> <PID>

    如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。


2. 当以gdb <program>方式启动gdb后,gdb会在PATH路径和当前目录中搜索<program>的源文件


3. 暂停/恢复程序运行

调试程序中,暂停程序运行是必须的,GDB可以方便地暂停程序的运行。你可以设置程序的在哪行停住,在什么条件下停住,在收到什么信号时停往等等。以便于你查看运行时的变量,以及运行时的流程。

当进程被gdb停住时,你可以使用info program 来查看程序的是否在运行,进程号,被暂停的原因。

在gdb中,我们可以有以下几种暂停方式:断点(BreakPoint)、观察点(Watch Point)、捕捉点(Catch Point)、信号(Signals)、线程停止(Thread Stops)。如果要恢复程序运行,可以使用c或是 continue命令。

4. 设置断点(Break Points)

我们用break命令来设置断点。下面有几点设置断点的方法:

break <function>
    在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数名。

break <linenum>
    在指定行号停住。

break +offset
break -offset
    在当前行号的前面或后面的offset行停住。offiset为自然数。

break filename:linenum
    在源文件filename的linenum行处停住。

break filename:function
    在源文件filename的function函数的入口处停住。

break *address
    在程序运行的内存地址处停住。

break
    break命令没有参数时,表示在下一条指令处停住。

break ... if <condition>
    ...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环体中,可以设置break if i==100,表示当i为100时停住程序。

查看断点时,可使用info命令,如下所示:(注:n表示断点号)

    info breakpoints [n]
    info break [n]

5. 设置观察点(WatchPoint)

观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:

watch <expr>
    为表达式(变量)expr设置一个观察点。一表达式值有变化时,马上停住程序。

rwatch <expr>
    当表达式(变量)expr被读时,停住程序。

awatch <expr>
    当表达式(变量)的值被读或被写时,停住程序。

info watchpoints
    列出当前所设置了的所有观察点。

[编辑] 设置捕捉点(CatchPoint)

你可设置捕捉点来捕捉程序运行时的一些事件。如:载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为:

    catch <event>

当event发生时,停住程序。event可以是下面的内容:

    throw 一个C++抛出的异常。(throw为关键字)
    catch 一个C++捕捉到的异常。(catch为关键字)
    exec 调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用)
    fork 调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用)
    vfork 调用系统调用vfork时。(vfork为关键字,目前此功能只在HP-UX下有用)
    load 或 load <libname> 载入共享库(动态链接库)时。(load为关键字,目前此功能只在HP-UX下有用)
    unload 或 unload <libname> 卸载共享库(动态链接库)时。(unload为关键字,目前此功能只在HP-UX下有用)

    tcatch <event>

只设置一次捕捉点,当程序停住以後,该点被自动删除。

6. 维护停止点

上面说了如何设置程序的停止点,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...]

7. 恢复程序运行和单步调试

当程序被停住了,你可以用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-mode
set step-mode on
    打开step-mode模式,于是,在进行单步跟踪时,程序不会因为没有debug信息而不停住。这个参数很有利于查看机器码。

set step-mode off
    关闭step-mode模式。

finish
    运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。

until 或 u
    当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。

stepi 或 si
nexti 或 ni
    单步跟踪一条机器指令!一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令。与之一样有相同功能的命令是 “display/i $pc” ,当运行完这个命令后,单步跟踪会在打出程序代码的同时打出机器指令(也就是汇编代码)

分享到:
评论

相关推荐

    STM32 GDB调试手册

    STM32 GDB 调试手册 本手册详细介绍了如何使用 GDB 调试 STM32 微控制器,旨在帮助开发者快速掌握 GDB 调试工具的使用方法,以便更好地 debug STM32 项目。 标题解释 STM32 GDB 调试手册是 STM 官方提供的调试指南...

    用GDB调试程序(整理有书签).pdf

    陈浩的《用GDB调试程序》和守望的个人博客的《GDB调试指南》这两份资料,提供了丰富的实践案例和详细的操作步骤,帮助读者从基础到进阶掌握GDB的使用技巧。通过阅读这些教程,你可以了解如何有效地使用GDB解决实际...

    GDB调试手册(中文版)

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

    gdb调试 rk可运行程序

    标题"**gdb调试 RK可运行程序**"指出了我们将在AArch64架构上使用GDB来调试针对Rockchip处理器设计的程序。这通常涉及到嵌入式设备或高性能计算平台,因为Rockchip芯片常见于这些领域。在AArch64架构下,GDB的使用...

    GDB调试程序[陈皓]&GDB调试工具指南

    《GDB调试程序[陈皓]》与《GDB调试工具指南》这两份PDF文档,是深入了解和精通GDB(GNU Debugger)这一强大调试工具的重要参考资料。GDB是开源世界中广泛使用的C、C++以及其他多种语言的调试器,它允许开发者在运行...

    Linux课件:GDB调试简明指南.pdf

    Linux 调试工具 GDB 简明指南 GDB(GNU Debugger)是 Linux 系统中的一款强大调试工具,用于调试 C 和 C++ 程序。它使用户可以在程序运行时观察程序的内部结构和内存的使用情况。GDB 提供了多种功能,如监视程序中...

    用GDB调试程序 用GDB调试程序

    GDB 调试程序 GDB 是一个强大的命令行调试工具,主要帮忙用户完成四个方面的功能:启动程序、设置断点、检查程序状态和动态改变程序执行环境。GDB 的强大之处在于其可以形成执行序列,形成脚本,非常容易集成在一起...

    GDB调试--以汇编语言为例

    "GDB调试--以汇编语言为例" 本文将详细介绍如何使用GDB调试汇编语言程序,包括使用CPUID指令来获取CPU信息,并使用GDB调试器来调试汇编语言程序。 一、CPUID指令 CPUID指令是Intel Pentium级别以上CPU中的一个...

    gdb调试详解 讲述如何使用gdb调试以及调试core dump

    gdb调试详解 GDB(GNU Debugger)是一款功能强大的调试工具,广泛应用于Linux平台。通过GDB,可以轻松地调试程序,检查程序崩溃后的核心转储文件(Core Dump),从而帮助开发者快速定位和解决问题。 GDB基础命令 ...

    Linux下gdb调试工具指南

    ### Linux下gdb调试工具指南:深入解析与实践 #### 引言 在软件开发领域,尤其是对于系统级编程和复杂应用的维护,一个高效、功能全面的调试工具是不可或缺的。GNU调试器(GDB)正是这样一款强大的调试工具,它...

    Linux GDB调试文档

    总结来看,一个合格的Linux C/C++后台开发者应该掌握GDB调试技术,利用这一强大的工具来增强开发过程中的问题诊断和解决能力。GDB的版本不断更新,其功能也在不断增强,例如在*.*.*.**版本中,特别强调了对多线程和...

    GDB--gdb调试.pdf

    **知识点详解:GDB调试工具入门与进阶** 在IT行业,尤其是软件开发领域,调试是确保代码质量、提升程序稳定性的重要环节。GDB(GNU Debugger)作为一款强大的开源源码级调试器,在Linux和Unix系统中占据着举足轻重...

    GDB调试应用指南Guide.pdf

    在介绍GDB调试程序的方法前,了解如何判断程序是否包含调试信息是第一步。 通常情况下,想要使用GDB调试C语言程序,需要在编译时添加-g参数来保留调试信息。如果不确定某个程序是否包含了调试信息,可以通过gdb命令...

    GDB 调试 中文手册

    GDB 调试中文手册 GDB(GNU Debugger)是一款功能强大且广泛使用的 UNIX 下的程序调试工具。它提供了多种功能,包括启动程序、设置断点、观察点和捕捉点、维护停止点、停止条件维护、为停止点设定运行命令、恢复...

    gdb调试标准教程gdb学习必备

    这篇教程是学习GDB调试的重要资源,适合嵌入式开发人员使用,因为它能够帮助理解并解决程序中的错误和问题。 GDB的基本功能包括: 1. **启动程序**:你可以通过GDB来启动你的程序,并根据需要定制运行参数,如传入...

    gdb调试(个人收集的丰富的GDB调试资料)

    ### GDB调试详解 #### GDB概述 GDB(GNU Debugger)是一款由GNU项目开发的开源调试工具,专为UNIX及类UNIX系统设计。对于在UNIX环境下进行软件开发的工程师而言,GDB提供了超越图形界面调试器的强大功能,如Visual...

    gdb调试器的使用,gdb

    ### gdb调试器的使用 #### 一、简介与安装 GDB(GNU Debugger)是一款功能强大的开源调试工具,主要用于在Linux环境下对C/C++程序进行调试。它支持多种类型的调试操作,包括设置断点、单步执行、查看内存变量状态...

Global site tag (gtag.js) - Google Analytics