汇编代码断点不能按预期工作

时间:2014-03-19 18:41:55

标签: debugging cortex-m3 lauterbach

我正在使用GCC 4.7.4和Lauterbach Combiprobe JTAG调试器开发STM32F2器件。在我的代码中,我有以下声明总是在某个位置打破以进行测试:

asm volatile ("BKPT #0");

这是唯一的断点。当我运行程序时,我可以看到我的程序到达断点,但我不能使用我的JTAG调试器超越此断点。相反,我必须通过该指令移动PC计数器以使程序执行。

这在过去是有效的,但我现在无法弄清楚为什么行为会有所不同。任何线索或提示都将不胜感激。

2 个答案:

答案 0 :(得分:1)

有很多损坏的JTAG调试器。您可能安装了JTAG适配器的更新?

当您将GDB作为调试器时,您可能会检查是否可以将宏set PC=PC+4添加到按钮或键。但如果这可能取决于您的IDE。

答案 1 :(得分:1)

如果您的应用程序代码中有断点指令,则程序计数器没有一般规则。某些CPU在包含断点指令的地址处停止,其他CPU在断点指令之后停止。

由于您使用标签“lauterbach”,我假设您使用的是Lauterbach的TRACE32调试器。

如果您认为调试器的行为在过去有所不同,我认为您应该联系Lauterbach支持。

现在,您可以使用以下TRACE32命令解决问题

Break.Set T:0x1000 /Program /CMD "Register.Set PP r(PP)+2"

(其中0x1000代表BKPT指令所在的地址。)