我遇到了一个非常烦人的问题,已经花了好几个月的时间。
我在MPLAB X中有一个项目。当我使用一个行断点时,它在调试我的项目时根本不会在正确的行上中断。
I使用MPLAB v4.15

这就是实际发生的事情:

无论断点在哪里,调试器都不会在正确的位置中断。
更多信息:

这一切为什么要发生?
还有更多的人有这个问题吗?
我该怎么解决这个问题?
编辑
遗憾的是,K_Trenholm提出的解决方案对我没有用。我把3个"NOPs“放在一个函数中,但是它没有像你建议的那样起作用。见下图:

但我得到的是:

我想补充的是,我尝试了各种断点组合的NOPs。无论我做什么,程序总是停留在同一台PC的情况下,如上图所示。
谢谢你的答复,甚至对如何解决它有任何想法是非常有帮助的。如果你有任何其他的想法,我将非常感谢你分享它们!
发布于 2018-03-28 14:55:04
我想到了两件事:
1)编译器优化在调试时会导致断点位置/值的问题。在调试时,关闭优化(如果可能的话,在您的示例中,您的代码大小可能会出现在上限上)。
2)断点“打滑”。请参阅http://microchipdeveloper.com/tls0201:skid-effect#top-of-page
根据我所看到的,一种解决这个问题的方法是在您计划放置断点的行之后添加一些NOP指令。这将确保任何“打滑”都不会执行更多的代码。
发布于 2018-06-07 08:06:58
中断发生的指令将始终完全执行,管道中的任何挂起的内容也将执行。对于单个循环指令,这增加了一个指令打滑。对于多个循环指令和分支,它会添加多个循环。因此,如果要避免将调试器跳转到子例程中,就必须在断点后面包含一些Nop。
示例:
void main (void)
{
int x = 0;
x++1; //put Breakpoint here
Nop();
Nop();
Nop(); //Debugger will stop here
foo(x); //so foo() is not called
}根据所使用的MCU,调试器在命中断点时会产生“打滑效应”。在停止之前,调试会话将执行最多两个额外的指令。
https://stackoverflow.com/questions/49537240
复制相似问题