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