如何在自定义命令中禁用GDB TUI更新src窗口?

如何在自定义命令中禁用GDB TUI更新src窗口?,gdb,tui,Gdb,Tui,为了允许在内部跟踪函数之后单步执行下一个语句,我将以下内容放入gdbinit中(也可以在使用gdb-x执行的情况下工作,或者通过运行的gdb手动一次性执行source mystep.cmd): 定义mystep 设置$steps=1 如果$argc==1 设置$steps=$arg0 结束 设置$i=0 而$i

为了允许在内部跟踪函数之后单步执行下一个语句,我将以下内容放入gdbinit中(也可以在使用
gdb-x执行的情况下工作,或者通过运行的gdb手动一次性执行
source mystep.cmd
):

定义mystep
设置$steps=1
如果$argc==1
设置$steps=$arg0
结束
设置$i=0
而$i<$steps
高级跟踪函数
完成
设置$i=$i+1
结束
刷新
结束
文档mystep
步进程序,直到它到达另一个跟踪源行。
用法:mystep[N]
参数N表示步骤N次(或直到程序因其他原因停止)。
结束
这本身就很有魅力,但有两个问题:

  • 如果tui模式尚未激活,则最终的
    刷新将始终启用tui模式
  • TUI的源窗口有时会闪烁,因为它试图显示我不感兴趣的trace_func(因为用户defind命令使用
    advance
    s继续,直到到达它),然后再转到后面的实际语句。这尤其适用于
    mystep3
    (以及更高版本,因为tui在那里停留的时间更长)
  • 问题:

  • 有没有办法通过命令文件检查(我想可以通过
    if…end
    查询tui状态并根据结果执行刷新或不执行任何操作)
  • 是否有防止更新源窗口的选项(=它应保持在当前帧中)
  • define mystep
      set $steps = 1
      if $argc == 1
        set $steps = $arg0
      end
      set $i = 0
      while $i < $steps
        advance trace_func
        finish
        set $i = $i + 1
      end
      refresh
    end
    document mystep
      Step program until it reaches a different traced source line.
      Usage: mystep [N]
      Argument N means step N times (or till program stops for another reason).
    end