GDB那些事之《gdb internal》读书笔记
- 第二章 整体结构
- GDB总体上分为三个部分
用户接口(user interface),主要是一些用户可以使用的命令,说明之类
符号处理(symbol handling),主要是各种object文件读取,源代码语言的parse、类型判断,调试信息的解释,符号表的管理等
目标系统处理(target system handling),主要是控制逻辑,程序运行stack frame的分析,真实运行的目标系统的管理操作(比如remote到嵌入式设备)
这里注意,因为host和target很有可能不是一种architecture, gdb需要在这两者之间进行通信,做必要的转换。这也带来了一些不变及限制。
- Frame
用来记录所有函数的调用关系
GDB中使用create_new_frame, 相应的代码时frame.c
- 软件断点和硬件断点(Breakpoint)
硬件断点需要不同的chip的支持,如果遇到需要查询相应的硬件手册及gdb对其的支持(从来没有遇见过,这里可耻的skip,留待以后有缘再补上)
软件断点,GDB通过在用户设置的断点处,保存现场,并插入trap(能够出发exception的指令),从而中断程序执行,再根据用户的指令来进行之后的动作,如果用户选择继续,则恢复现场,继续执行相应指令
相应的代码是:breakpoint.
- GDB总体上分为三个部分