gdb

2011年12月21日 发表评论 阅读评论

GDB简介

GDB(GNU Project debugger)可以一个可以让你在程序运行时观察程序的内部结构和崩溃时查看程序崩溃现场的”调试器”。

GDB主要提供如下功能:

1:启动程序并可以定制程序启动运行环境和参数
2:制定条件(断点)让程序停止执行
3:在程序停止执行时查看程序信息
4:修改程序运行逻辑,这样就能纠正一个错误后继续调试

GDB能调试大部分语言编写的程序(主要是C/C++), 并且可以运行于大多数主流的Unix/Linux/Windows操作系统上。

GDB资源集合:

kgdb.info站点 GDB文章归档:
http://www.kgdb.info/category/gdb/

GDB 官方站点:
http://www.gnu.org/software/gdb/

GDB 用户手册:
Debugging with gdb

GDB 内幕:
gdbint

GDB远程串行协议
GDB RSP(redhat 站点)
GDB RSP(gdb 站点)

GDB邮件列表:
GDB mailing-lists

GDB Maintainers

GDB_Maintainer

  1. 一剑飘血
    2010年7月12日22:34 | #1

    谢谢分享。

    [回复]

  2. firo
    2011年9月5日20:44 | #2

    Gelivable,刚好要学习下GDB。查相关问题时,找到这里了.不俗的站点。。。呵呵

    [回复]

  3. james911
    2011年12月19日20:39 | #3

    博主,你好
    请教一个问题

    我用gdb工具调试,有的时候如果一个函数的函数体太长,单步执行时gdb可能会出错,出错后我遇到的现象有两种:
    1. gdb就乱跳到我也不知道的代码行中.
    2. 直接就忽略了这个函数下面的代码,(但经检验代码被执行了,一直是用next指令).
    这个在我的环境中出现过好几次了,挺影响工作的,所以请问博主有没有遇过这种现象,又是怎么解决的,谢谢!

    另外我把configure以及Makefile文件中-O2参数改为-O0,可是问题依旧,任然会出现乱跳的现象

    [回复]

    DDD 回复:

    @james911
    我没遇到过你说的情况,能提供一个可以复现的代码段给我不?我看看。

    在使用宏/汇编的情况下,可能会导致C代码行对应不上,不知道你是不是说这种情况。

    一般调试的时候建议是不要优化选项的,即就是你使用的方法加-O0, 并且最好加上 -g.

    [回复]

  4. james911
    2011年12月19日21:57 | #4

    哇 楼上好速度~~
    谢谢
    不过源代码太大了~~ 不是在一处出现乱跳的情况 而是在几乎——所有的地方都乱跳……
    是个开源项目

    这个能不能上传附件呢 要不我把改源代码的configure文件和Makefile文件放上来

    [回复]

  5. 2011年12月20日11:22 | #5

    @james911
    看看是不是那个地方的源文件编译时候被优化了。可能虽然全局设置了不优化,但那个文件的Makefile确被指定加了优化。

    你可以把”源代码的configure文件和Makefile“发到我邮箱… libfetion(at)gmail.com

    [回复]

  6. james911
    2011年12月21日10:54 | #6

    谢谢DDD的帮助,找到问题了,就是应该在配置文件中把所有的-O2参数改为-O0,之前出问题是因为没有改双引号里的,另外我录了段代码乱跳的视频,您可以看看,和configure文件和Makefile一起发到你邮箱里

    [回复]

  7. pc8504
    2012年2月21日12:36 | #7

    由于工作需要,我想能编译gdb-7.3让其能同时支持多个target,并且生成相应target的sim。我的过程如下:
    mkdir target_build
    cd target_build
    ../configure –enable-targets=target1,target2 –enable-sim CLFAGS=-g
    make all
    这样在target_build/sim目录中,始终没有生成相应target的sim.
    但是如果如下单个target编译,可以生成相应的sim
    ../configure –target=target1 –enable-sim
    make all
    折腾了两天,毫无结果,望大侠指点一下,谢谢

    [回复]

    DDD 回复:

    这个问题看起来比较奇怪,猜测应该是个编译的小BUG,你可以试下别的gdb版本看看(比如说老点的版本)。

    或者去 http://www.hellogcc.org/ 问问,那里有一群国内专门搞gdb的人,他们也许能帮你解决这个问题。

    [回复]

  8. pc8504
    2012年2月26日21:15 | #8

    目前解决了,通过调试gdb源码以及脚本文件,实现了我想要的结果了,呵呵。请问您主要是研究KGDB DDD GDB等等和调试相关的东西的吗?

    [回复]

  1. 2011年6月26日23:42 | #1