Команды прерывания GDB не выполняются в командных файлах

У меня есть сценарий отладки, который выполняет следующие действия:

  1. устанавливает две точки останова. назовем их начальной и конечной точками останова.
  2. после запуска сценарий продолжается, пока не будет достигнута начальная точка останова.
  3. при достижении начальной точки останова я выполняю пошаговое выполнение, пока не будет достигнута конечная точка останова.

Это мой командный файл:

# end breakpoint
break 38
commands
    stop 1
    quit
end

# start breakpoint
break 50
commands
    set logging off
    set logging file log.txt
    set logging overwrite on
    set logging on
    printf "program counter: $pc"
end

continue

set $count = 0
set $steps = 15
while $count < $steps
    set $count = $count + 1
    next
end

Чтобы уточнить, как только я начинаю сеанс отладки, программа останавливается в начале main; вот почему я продолжаю в сценарии, чтобы перейти к начальной точке останова.

Проблема в том, что команда break не выполняется при достижении точки останова. Вот что я получаю в консоли:

++next

Breakpoint 23, main () at ..\..\hello_world.c:50
50      test_byte++;
++set $count = $count + 1
++next
51      test_byte++;
++set $count = $count + 1
++next

Ничего не выводится на консоль или в файл журнала. Однако, когда я пишу ту же команду break прямо в консоль и шагаю вручную, она работает.

Я отлаживаю VEGAboard с помощью RISC-V, используя отладчик JLink и openOCD.

Обновить:

Я понял, что проблема как-то в следующем в цикле. Поэтому всякий раз, когда я избавляюсь от цикла и просто жестко кодирую количество следующих команд, команда break выполняется успешно.

Это поведение по-прежнему странное, и я надеюсь, что у кого-нибудь есть объяснение.

0 ответов

Другие вопросы по тегам