Debugging 嵌入式系统中的硬件断点与软件断点

Debugging 嵌入式系统中的硬件断点与软件断点,debugging,embedded,interrupt,breakpoints,jtag,Debugging,Embedded,Interrupt,Breakpoints,Jtag,我的理解是,插入软件断点涉及到将要执行的代码中的下一条指令替换为软件中断指令,这将导致CPU在到达该指令时停止 硬件断点涉及将要执行的断点后的下一条指令的地址放入寄存器,当地址匹配时,通过使用硬件比较器,这会导致CPU停止(如果我错了,请纠正我) 我感到困惑的是,例如,当使用硬件调试器通过JTAG调试电路板时,我们是否只使用硬件断点?或者JTAG也可以使用软件断点吗 GDB是仅用于软件断点,还是也可以与JTAG一起使用?对不起,如果问题有点宽泛 “如果我错了,请纠正我” 断点是在指令上设置的,而

我的理解是,插入软件断点涉及到将要执行的代码中的下一条指令替换为软件中断指令,这将导致CPU在到达该指令时停止

硬件断点涉及将要执行的断点后的下一条指令的地址放入寄存器,当地址匹配时,通过使用硬件比较器,这会导致CPU停止(如果我错了,请纠正我)

我感到困惑的是,例如,当使用硬件调试器通过JTAG调试电路板时,我们是否只使用硬件断点?或者JTAG也可以使用软件断点吗

GDB是仅用于软件断点,还是也可以与JTAG一起使用?对不起,如果问题有点宽泛

“如果我错了,请纠正我”

断点是在指令上设置的,而不是在指令之后-中断发生在指令执行之前,而不是之后-否则在跳转、调用或分支指令上设置断点将失败

“例如,当使用硬件调试器通过JTAG调试电路板时,我们是否只使用硬件断点?”

JTAG是片上调试的简单通信接口(并用于其他用途,例如电路内存、FPGA编程和边界扫描)

例如,虽然ARM Cortex-M上的架构可能有所不同,但您可以从目标代码访问片上调试寄存器并设置硬件断点。Yoiu还可以使用BKPT指令(与您建议的SWI相反)在代码中放置软件断点

或者JTAG也可以使用软件断点吗

正如我所说,JTAG只是片上调试的通信接口,但是通过片上调试,您可以直接设置任何RAM内容,因此运行在开发主机上的JTAG连接的调试器软件可以临时修改RAM中的代码,以设置软件断点(通过将目标指令替换为BKPT,然后在命中断点时,恢复到原始指令以便执行。对于从ROM运行的代码,软件断点并不那么简单,尽管有些调试器支持无限的ROM断点(价格不菲)-此类硬件的制造商不一定会公布其使用的方法

在JTAG和片上调试在低端部件上广泛使用之前,使用了诸如电路内仿真和ROM仿真器之类的技术。这些通常是昂贵而复杂的解决方案

GDB是仅用于软件断点,还是也可以与JTAG一起使用

GDB可以以多种方式使用。它需要一个“调试存根”——一个将调试器软件映射到可用硬件的软件层——其性质取决于所使用的调试接口和目标设备。例如,当使用UART或以太网端口时,存根实际上是在目标上运行的代码(例如Linux的
gdbserver
)。在这种情况下,可靠性较低,因为软件错误可能会阻止调试端口驱动程序实际运行,特别是在缺乏MMU保护的目标中。更简单的JTAG设备通过在开发主机上运行的存根与GDB接口,例如常用的OpenOCD软件。更昂贵的JTAG调试硬件可能会运行存根在JTAG硬件本身上-例如Abatron的bdi2000。无论哪种方式,调试存根都能够根据目标功能使用硬件和软件断点。

断点定义 在本文的上下文中,让我们就断点的统一定义达成一致。这里讨论的断点是我们希望处理器停止以进行某种调试的程序位置。可能还有其他类型的断点,例如由数据访问触发的断点,但在本文中,我们将讨论只有程序断点,即应用程序代码中每次遇到代码时都要暂停的位置

硬件与软件断点 硬件断点和软件断点有什么区别?很明显,答案是“硬件断点在硬件中实现”和“软件断点在软件中实现”。但这到底意味着什么,以及它的后果是什么?为什么我会选择其中一个

硬件断点 硬件断点实际上是由集成到设备中的特殊逻辑实现的。您可以将硬件断点视为连接到程序地址总线的一组可编程比较器。这些比较器使用特定的地址值进行编程。当代码执行时,以及地址中的所有位在程序地址总线上,匹配编程到比较器中的位,硬件断点逻辑生成一个信号给CPU停止。 使用硬件断点的优点是,它可以在任何类型的内存中使用。在讨论软件断点之后,这可能更有意义。当我们讨论软件断点时,我们会发现它们只能在易失性内存中使用。无论正在执行的代码是在RAM中还是在其他内存中,都可以使用硬件断点ROM,因为与硬件断点逻辑没有区别。它只是匹配PAB上的地址,并在找到地址时停止CPU。 HWBP的缺点是,因为它们是在硬件中实现的,所以可用的HWBP数量有限。可用的HWBP数量因体系结构而异,但在大多数情况下,只有2-8个可用。计算设备数量的最简单方法是在CCS中连接到它,并保持设置HWBP,直到获得没有可用的错误消息

软件断点 如前所述,软件断点