我有一个调试脚本,它执行以下操作:
- 设置两个断点。让我们称它们为开始和结束断点。
- 启动后,脚本将继续执行,直到命中启动断点。
- 一旦命中开始断点,我将执行单步执行,直到命中结束断点。
这是我的命令文件:
# 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
控制台或日志文件不会打印任何内容。但是,当我将相同的中断命令直接写入控制台并手动执行时,它可以工作。
我正在使用 JLink 调试器和 openOCD 调试带有 RISC-V 的 VEGAboard。
更新:
我发现问题出在循环中。因此,每当我摆脱循环并简单地硬编码下一个命令的数量时,break 命令就会成功执行。
这种行为仍然很奇怪,我希望有人能解释一下。