【问题标题】:how does gdb work?gdb 是如何工作的?
【发布时间】:2010-10-11 04:44:59
【问题描述】:

我想知道 gdb 在内部是如何工作的。 例如我知道一个简短的想法,它利用 ptrace() 系统调用来监视跟踪的程序。 但我想知道它是如何处理信号的,它是如何插入新代码的,以及它所做的其他一些很棒的事情。

【问题讨论】:

标签: gdb


【解决方案1】:

查看GDB Internals Manual,它涵盖了一些重要方面。此文档还有一个较旧的PDF version

来自手册:

本文档记录了 GNU 调试器 gdb 的内部结构。它包括对 gdb 的关键算法和操作的描述,以及使 gdb 适应特定主机和目标的机制。

【讨论】:

【解决方案2】:

取自 gdbint.pdf:

它可以作为硬件断点或软件来完成 断点:

  • 硬件断点有时可用作某些芯片的内置调试功能。通常,这些工作通过专门的 可以存储断点地址的寄存器。如果电脑 (程序计数器的简写)曾经匹配断点中的值 注册时,CPU 会引发异常并将其报告给 GDB。
  • 另一种可能性是在使用模拟器时;许多仿真器包括监视从 处理器,并在地址与断点匹配时强制它停止 地址。
  • 第三种可能性是目标已经有能力以某种方式进行断点;例如,一个 ROM 监视器可以自己做 软件断点。所以虽然这些不是字面上的硬件 断点,从 GDB 的角度来看,它们的工作方式相同;
  • 软件断点需要 GDB 做更多的工作。基本理论是GDB会用陷阱代替程序指令, 非法除法,或其他一些会导致 异常,然后当它遇到时,GDB 将处理该异常 并停止程序。当用户说要继续时,GDB 将恢复 原来的指令,单步,重新插入陷阱,和 继续。

【讨论】:

    【解决方案3】:

    你会发现的唯一方法是研究source

    您也可以自行构建和调试它。单步执行代码,您就会确切地知道它是如何工作的。

    不过,阅读 GDB 源代码并不适合胆小的人——它充满了宏,并且大量使用 libbfd,这本身就很难理解。

    它必须这样做,因为它是可移植的(尤其是在根本没有 ptrace() 的平台上构建和工作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多