我想知道gdb如何在内部工作。 例如我知道一个简单的想法,它使用ptrace()系统调用来监视跟踪的程序。 但我想知道它如何处理信号,它如何插入新的代码,以及其他如此神话般的事情。gdb如何工作?
Q
gdb如何工作?
25
A
回答
6
你会发现的唯一方法是通过研究source。
您也可以构建它并自行调试它。通过代码,你会知道究竟是它是如何做的。
读取GDB源代码虽然不是心存隐晦 - 它充满了宏,并且大量使用libbfd
,这本身很难理解。
它必须,因为它是可移植的(并且特别是在没有ptrace()
的平台上构建和工作)。
16
查看GDB Internals Manual,其中涵盖了一些重要方面。本文档中还有一个较旧的PDF version。
从手册:
该文件记录了GNU调试器,GDB的内部。它包括gdb关键算法和操作的描述,以及将gdb调整到特定主机和目标的机制。
3
从gdbint.pdf摘自:
这是可以做到无论是作为硬件断点或软件断点 :
- 硬件断点有时可与一些一个内置调试功能芯片。通常这些工作是通过专用的 寄存器来存储断点地址。如果PC (程序计数器的简写)匹配了断点 寄存器中的值,则CPU引发异常并将其报告给GDB。
- 另一种可能性是仿真器在使用中;许多模拟器包括手表从 处理器出来的地址线电路,并迫使其停止如果地址断点的 地址匹配。
- 第三种可能性是目标已经有能力以某种方式做断点;例如,一个ROM监视器可能会自己做出 软件断点。因此,尽管这些并不是字面意义上的硬件断点,但从GDB的观点来看,它们的工作原理是一样的;
- 软件断点需要GDB做更多的工作。基本原理是,GDB将取代程序指令与陷阱, 非法鸿沟,或其他一些指令将导致 异常,然后遇到的真实时,GDB将采取例外 并停止该程序。当用户说继续,GDB将恢复 原始指令,单步,重新插入陷阱, 继续。
相关问题
- 1. GDB如何停止执行其他进程? GDB如何工作?
- 2. 与gdb有效地工作
- 3. 使Qt调试器正常工作(GDB)
- 4. 设置观看GDB不工作对我
- 5. ndk-gdb在macOS Sierra下工作吗?
- 6. 如何在gdb
- 7. GDB和GCC工会
- 8. 如何使用GDB
- 9. 如何使用gdb
- 10. 如何禁止gdb挂起?
- 11. 如何GDB在运行时
- 12. 如何正确使用gdb?
- 13. Gdb,如何使用打印?
- 14. 如何使用GDB调试
- 15. 如何从python访问gdb
- 16. 如何工作?
- 17. 如何:(){:| :& } ;:工作
- 18. hgearman工人如何工作?
- 19. 让GDB和eclipse一起工作,从瑞萨接收RX62N板
- 20. Android原生的调试(NDK-GDB不工作)
- 21. gdb中的下一个命令无法正常工作
- 22. NSLog在LLDB中没有输出。在GDB中工作
- 23. C程序在GDB中的工作,但不是正常
- 24. gdb os x sierra 10.12.3不能正常工作
- 25. GDB - 无法获取命令历史工作
- 26. 为什么gdb在gcc输出上工作不正确?
- 27. set_error_handler不工作我想如何工作
- 28. gdb调用函数 - 如何使用std :: cout作为参数?
- 29. 如何继续操作gdb命令控制台?
- 30. 如何将GDB作为GID位设置的组运行
这包括一些GDB内部的重要方面:www.gnuarm.com/pdf/gdbint.pdf – zengr 2010-10-11 05:05:54
@zengr:你为什么不张贴,作为一个答案? – DarkDust 2010-10-11 05:39:20