GDB中断命令未在命令文件中执行

时间:2019-09-18 08:52:55

标签: debugging gdb riscv openocd jlink

我有一个执行以下操作的调试脚本:

  1. 设置两个断点。我们称它们为开始结束断点。
  2. 启动后,脚本将继续运行,直到遇到 start 断点为止。
  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 的开头停止;这就是为什么脚本中有 continue 跳转到 start 断点的原因。

问题在于,无论何时击中断点,都不会执行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命令直接写到控制台并手动执行时,它会起作用。

我正在使用JLink调试器和openOCD使用RISC-V调试VEGAboard。

更新

我认为问题在于循环中的下一个。因此,只要我摆脱循环并简单地对 next 命令的数量进行硬编码,break命令就会成功执行。

这种行为仍然很奇怪,我希望有人能解释一下。

0 个答案:

没有答案