GDB断点原理
1. 硬件(watchpoint,breakpoint)断点
以ARM32为例:
初始化阶段,通过hw_breakpoint.c注册断点异常handler
arch_hw_breakpoint_init
-> hook_fault_code(hw_breakpoint_pending) 注册watchpoint的SIGTRAP hook;
设置断点时,通过ptrace_sethbpregs将断点信息写入到CPU debug register
2. 软件断点
2.1 breakpoint
替换程序断点位置的代码指令修改为陷入异常的指令,从而触发断点信号,再恢复回代码指令。
2.2 watch point
在每次访问内存都由软件做判断,性能严重下降。