首页 > 解决方案 > GDB 将断点移动到不同的行

问题描述

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

double average = sum / 10;当我在使用的行上设置断点时break 172,它会通过响应来确认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;

任何想法表示赞赏。

标签: cgdbmsp430

解决方案


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

要“逐行”调试程序,无需优化即可编译。

或与惊喜一起生活;无论如何,它是快乐的源泉。


推荐阅读