gdb是如何工作的?

时间:2010-10-11 04:44:59

标签: gdb

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

3 个答案:

答案 0 :(得分:16)

查看GDB Internals Manual,其中包含一些重要方面。此文档中还有较早的PDF version

从手册:

  

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

答案 1 :(得分:6)

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

您也可以构建它并自行调试它。逐步完成代码,您将完全了解 它是如何做到的。

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

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

答案 2 :(得分:4)

取自gdbint.pdf:

  

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

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