GDB перемещает точку останова на другую строку - PullRequest
0 голосов
/ 01 апреля 2020

Я отлаживаю C код, работающий на микропроцессоре MSP430 с использованием GDB.

Когда я устанавливаю точку останова на линии double average = sum / 10; с помощью break 172, это подтверждается ответом Breakpoint 1 at 0xc01c: file main.c, line 172, но когда я продолжаю с c, код запускается до тех пор, пока не достигнет Breakpoint 1, main () at main.c:184.

У меня не было проблем с отладкой до недавнего времени, поэтому я попытался вернуть все к предыдущей версии, и у меня все еще есть эта проблема. Я также попытался:

  • Выключение и включение моего ноутбука.
  • Отключение и повторное подключение каждого кабеля, связанного с микропроцессором и его цепью.
  • Закрытие и повторное открытие всех терминалов windows.
  • Перекомпиляция и повторная загрузка моего C кода в микропроцессор.
  • Операторы печати, помогающие отладке, не подходят, потому что микропроцессор не может удержаться #include <stdio.h>.
  • Очистка всех точек останова перед установкой этой, но ни одна не найдена.

Код выглядит примерно так:

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;.

Любые идеи приветствуются.

1 Ответ

1 голос
/ 02 апреля 2020

Если вы компилируете с оптимизацией, может произойти несколько "странных" вещей , см. Документацию вашего компилятора. Это может привести к удалению или перестановке операторов, а при отладке - к удивительному поведению.

Для отладки программы "по линии" компилировать без оптимизации.

Или жить с сюрпризами; в любом случае это источник восторга.

...