硬件断点和软件断点(整理)

文章目录

  • 1. 断点的类型
  • 2. 为什么要分软件断点和硬件断点呢?
  • 3. GDB中如何设置软/硬件断点

1. 断点的类型

  • 软件断点:由非法指令异常实现,适用于运行于内存中的程序(软件实现)。以x86为例,向某个地址打入断点,实际上就是往该地址写入断点指令INT 3,即0xCC。目标程序运行到这条指令之后就会触发SIGTRAP信号,gdb捕获到这个信号,根据目标程序当前停止位置查询gdb维护的断点链表,若发现在该地址确实存在断点,则可判定为断点命中[1]。
  • 硬件断点:由硬件特性实现(数量有限),适用于直接在flash中运行的程序。

2. 为什么要分软件断点和硬件断点呢?

既然软件断点是要往某个地址写入断点指令的,那么最起码该地址应该是可写的吧?大多数时候,我们的程序是会被加载到内存(RAM)中执行的,RAM是可读可写,这时候软件断电就是有效的[2]。
但是,对于某些比较重要的程序,可能会直接在flash中执行,并且flash对用户可能是只读的,这时候软件断点就没有用了,因为没办法写进断点指令,此时必须依赖于硬件断点。这就是软件断点和硬件断点使用上的不同。

3. GDB中如何设置软/硬件断点

  • 软件断点:break 命令
  • 硬件断点:hbreak命令

[1] https://blog.csdn.net/gowyz/article/details/7290701
[2] https://www.cnblogs.com/-glb/p/12514577.html
[3] https://blog.csdn.net/small_prince_/article/details/80681684

你可能感兴趣的:(嵌入式)