我正在尝试使用GDB命令文件实现单步执行。每当遇到任何断点时,我都希望停止执行命令文件。
有没有办法检测到断点被击中?以及在那之后如何停止执行命令文件。
我检查了文件,看来我只能对某些断点使用break命令。但不是为了随机断点。
我有这样的东西:
printf "single stepping\n"
set $steps_count = 0
while ($steps_count < 5)
set $steps_count = $steps_count + 1
printf "program counter 0x%x\n", $pc
printf "next #%d\n", $steps_count
next
end
这是我想要实现的:
printf "single stepping\n"
set $steps_count = 0
while (# breakpoint is not hit)
set $steps_count = $steps_count + 1
printf "program counter 0x%x\n", $pc
printf "next #%d\n", $steps_count
next
end
# end the execution of the command file.
更新: 我尝试使用以下方法:
# set the end breakpoint
break *0x199e
commands
stop 1
quit
end
break *0x1980
# set a certain once we encounter the first breakpoint
commands
set $count = 0
while $count < 5
printf "#PC: 0x%x", $pc
set $count = $count + 1
stepi
end
end
一旦第一个断点被击中,这应该开始记录程序计数器。但是我不知道为什么这个break命令不起作用。一旦击中断点,程序将停止并且不输入while循环!
更新: 根据gdb文档:
在恢复执行的命令之后,命令列表中的任何其他命令将被忽略。这是因为,无论何时恢复执行(即使是简单的下一步或步骤),您都可能会遇到另一个断点,该断点可能具有自己的命令列表,从而导致执行哪个列表含糊不清。
所以我认为在中断命令中放置具有 step 或 next 的循环不是一个好主意。
答案 0 :(得分:0)
尝试类似的东西:
commands 1-10 # for breakpoints number 1 through 10
set $breakpoint_hit = 1
end
然后在循环中检查。