Debugging 如何在GDB命令文件中检测断点并停止执行?

Debugging 如何在GDB命令文件中检测断点并停止执行?,debugging,gdb,Debugging,Gdb,我正在尝试使用GDB命令文件实现一个单步执行。每当遇到任何断点时,我都希望停止执行命令文件 有没有办法检测到断点被击中?还有在那之后我如何停止执行命令文件 我检查了documantation,似乎我只能对某些断点使用break命令。但不是针对随机断点 我有这样的想法: printf "single stepping\n" set $steps_count = 0 while ($steps_count < 5) set $steps_count = $steps

我正在尝试使用GDB命令文件实现一个单步执行。每当遇到任何断点时,我都希望停止执行命令文件

有没有办法检测到断点被击中?还有在那之后我如何停止执行命令文件

我检查了documantation,似乎我只能对某些断点使用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
更新: 我试着使用以下方法:

# 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

#设置结束断点
中断*0x199e
命令
第一站
退出
结束
中断*0x1980
#一旦遇到第一个断点,就设置一个特定的断点
命令
设置$count=0
而$count<5
printf“#PC:0x%x”,$PC
设置$count=$count+1
步骤一
结束
结束
一旦到达第一个断点,就应该开始记录程序计数器。但我不知道为什么这个中断命令不起作用。一旦到达断点,程序就会停止,并且不会进入while循环

更新: 根据gdb文件:

在命令恢复执行后,将忽略命令列表中的任何其他命令。这是因为,每当您恢复执行时(即使是使用简单的下一步或步骤),您都可能会遇到另一个断点——它可能有自己的命令列表,从而导致关于要执行哪个列表的歧义

因此,我认为设置包含step或next in break命令的循环不是一个好主意。

尝试以下方法:

commands 1-10 # for breakpoints number 1 through 10
set $breakpoint_hit = 1
end

然后在你的循环中检查它。

我更新了问题。你能发现任何错误吗?对于更新,你能分享你得到的gdb输出(也许还有版本)吗?@ChristianB我用我在文档中找到的内容更新了这个问题。ThanksIt似乎在我的命令文件中没有执行中断命令。我已经用另一个问题问过了。
commands 1-10 # for breakpoints number 1 through 10
set $breakpoint_hit = 1
end