首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >硬件断点和软件断点有什么区别?

硬件断点和软件断点有什么区别?
EN

Stack Overflow用户
提问于 2012-01-16 10:30:41
回答 8查看 54K关注 0票数 46

硬件断点和软件断点有什么区别?

硬件断点据说比软件断点更快吗?如果是,那么怎么做?为什么我们需要软件断点呢?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-01-16 10:39:45

本文很好地讨论了利弊:http://www.nynaeve.net/?p=80

要直接回答您的问题,软件断点更灵活,因为硬件断点在某些功能和高度依赖于体系结构方面受到限制。本文给出的一个例子是,x86硬件有4个硬件断点的限制。

硬件断点速度更快,因为它们具有专用寄存器,并且开销小于软件断点。

票数 33
EN

Stack Overflow用户

发布于 2014-12-15 18:32:56

硬件断点实际上是比较器,将当前PC与比较器中的地址进行比较(如果启用的话)。设置断点时,硬件断点是最好的解决方案。通常通过调试探针设置(使用JTAG、SWD、.)。硬件断点的缺点:它们是有限的。CPU只有有限数量的硬件断点(比较器)。可用硬件断点的数量取决于CPU。ARM 7/9核心有2台,现代ARM设备(皮质-M 0,3, 4 )介于2到6之间,x86通常为4。

实际上,软件断点是通过用断点指令替换要断点的指令来设置的。断点指令存在于大多数CPU中,通常短于最短的指令,因此在x86上只有一个字节(0xcc,INT 3)。在Cortex-M CPU上,指令是2或4字节,所以断点指令是2字节指令。

如果程序位于RAM中(例如在PC上),则可以很容易地设置软件断点。许多嵌入式系统的程序都位于闪存中。这里不太容易交换指令,因为闪存需要重新编程,所以硬件断点主要使用。如果程序位于闪存中,大多数调试探针只支持硬件断点。然而,有些(如SEGGER的J)允许用断点指令重新编程闪存,而麻生太郎允许无限数量的(软件)断点,即使在调试位于flash中的程序时也是如此。

有关闪存中软件断点的更多信息

票数 26
EN

Stack Overflow用户

发布于 2012-01-16 10:50:42

您可以通过GDB内部件,它很好地解释了HW和SW断点。

HW断点需要MCU的支持。ARM控制器有特殊的寄存器,当PC (程序计数器) == sp寄存器CPU停止时,您可以在其中写入一些地址空间。通常需要将Jtag写入这些特殊寄存器。

SW断点是在GDB中通过插入陷阱、非法划分或其他会导致异常的指令来实现的,然后当遇到异常时,gdb将接受异常并停止程序。当用户说要继续时,gdb将恢复原来的指令,单步,重新插入陷阱,然后继续。

与SW调试器相比,使用HW调试器有许多优点,特别是当您处理中断和内存总线设备时。不能用软件调试器调试AFAIK中断。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8878716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档