有一种经过验证的方法可以检测 Cortex-M 上是否连接了调试器,如此处所示。
我曾经在调试会话中自动设置断点:
void autobreak() {
if (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) {
__asm__ __volatile__ ("bkpt #0");
}
}
我在 CLion 中使用 J-Link 和 OpenOCD 进行调试。使用autobreak()时,J-Link 会暂停程序执行,而无需我在调试模式下手动指定断点。但是,在运行模式下,J-Link似乎仍然会停止程序执行,这对我的应用程序来说是不可取的。
让我快速澄清一下每种模式的含义:
- 运行模式:仅闪存程序
- 调试模式:Flash 程序然后允许用户暂停程序执行并手动设置断点
有什么方法可以检查 J-Link 是在调试模式还是运行模式下连接?