gdb是如何工作的?

gdb是如何工作的?,gdb,Gdb,我想知道gdb在内部是如何工作的。 e、 我知道一个简单的想法,它利用ptrace()系统调用来监视跟踪的程序。 但我想知道它是如何处理信号的,它是如何插入新代码的,以及它所做的其他类似美妙的事情。你能找到答案的唯一方法就是研究 您还可以构建它并对其进行自身调试。一步一步地浏览代码,你就会确切地知道它是如何做的 不过,阅读GDB源代码并不适合胆小的人——它充满了宏,大量使用了本身很难理解的libbfd 它必须这样做,因为它是可移植的(尤其是在根本没有ptrace()的平台上构建和工作)。请查看,

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

你能找到答案的唯一方法就是研究

您还可以构建它并对其进行自身调试。一步一步地浏览代码,你就会确切地知道它是如何做的

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

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

请查看,其中介绍了一些重要方面。本文档还有一个较旧的版本

从手册中:

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

摘自gdbint.pdf:

它既可以作为硬件断点,也可以作为软件断点 断点:

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

这涵盖了GDB内部的一些重要方面:www.gnuarm.com/pdf/gdbint。pdf@zengr:你为什么不把它作为答案发布?@zengr:给定的链接已经死了。它在我的答案中没有找到zengr。。