Debugging GDB中断命令don';无法在命令文件中执行

Debugging GDB中断命令don';无法在命令文件中执行,debugging,gdb,riscv,openocd,segger-jlink,Debugging,Gdb,Riscv,Openocd,Segger Jlink,我有一个调试脚本,可以执行以下操作: 设置两个断点。让我们称之为开始和结束断点 启动后,脚本将继续运行,直到到达start断点 一旦命中开始断点,我将执行单步执行,直到命中结束断点 这是我的命令文件: # end breakpoint break 38 commands stop 1 quit end # start breakpoint break 50 commands set logging off set logging file log.txt

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

  • 设置两个断点。让我们称之为开始结束断点
  • 启动后,脚本将继续运行,直到到达start断点
  • 一旦命中开始断点,我将执行单步执行,直到命中结束断点
  • 这是我的命令文件:

    # 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
    
    不向控制台或日志文件打印任何内容。但是,当我将相同的break命令直接写入控制台并手动执行步骤时,它就可以工作了

    我正在使用JLink调试器和openOCD调试带有RISC-V的vegon

    更新:

    我发现问题在某种程度上在于循环中有下一个。因此,每当我摆脱循环并简单地硬编码下一个命令的数量时,break命令就会成功执行

    这种行为仍然很奇怪,我希望有人能对此做出解释。

    请参见和此。当我使用“finish”时,该函数对我有效。“钩子柱”帮助我们完成了下一步。看这个。当我使用“finish”时,该函数对我有效。“钩针”帮助我们完成了下一步。
    ++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