GDB 将断点移动到不同的行

GDB moves breakpoint to different line

我正在使用 GDB 在 MSP430 微处理器上调试 C 代码 运行。

当我使用 break 172 在行 double average = sum / 10; 上设置断点时,它通过响应 Breakpoint 1 at 0xc01c: file main.c, line 172 来确认,但是当我继续使用 c 时,代码运行直到它命中 Breakpoint 1, main () at main.c:184

直到最近我才遇到调试问题,所以我尝试将所有内容恢复到以前的版本,但我仍然遇到这个问题。我也试过:

代码类似于:

void main(void)
{
  OtherMethod();

  while(1)
  {
    int sum = 0;

    for(int i = 0; i < 10; i++)
    {
          sum += i;
    }

    double average = sum / 10; // Line 172
  }  
}

void OtherMethod(void)
{    
  P1DIR |= LED1 + LED2; // Line 184
}

其他可能有用的信息是我可以在 sum += i;.

行成功设置断点

欢迎任何想法。

如果您使用优化进行编译,"strange" 事情 可能会 发生,请参阅您的编译器文档。这 可能 导致语句被删除或重新排列,并且在调试时会出现令人惊讶的行为。

要调试程序 "by the line",编译时不进行优化。

或者接受惊喜;无论如何,这都是令人愉悦的源泉。