我注意到在 GDB 中,当发出类似info variables
的长输出命令时,输出一次显示一页,按下enter
向下并q
退出。
是否可以将默认寻呼机替换为另一个寻呼机,例如less
,以便我可以上下导航、退出、搜索等?
我注意到在 GDB 中,当发出类似info variables
的长输出命令时,输出一次显示一页,按下enter
向下并q
退出。
是否可以将默认寻呼机替换为另一个寻呼机,例如less
,以便我可以上下导航、退出、搜索等?
是否可以用另一个替换默认寻呼机
否:GDB 不会调用外部程序来显示输出,它只是在每个屏幕满屏时暂停输出(您可以让它不暂停set height 0
)。
除了运行 inside emacs
,您还可以使用screen
or tmux
(学习它们通常会在很多其他情况下帮助您),或者让 GDB 记录输出(set logging on
),然后使用您想要gdb.txt
的任何内容进行搜索。$PAGER
gdb
在里面运行emacs
,你应该能够使用 emacs 的分页命令。
M-x gdb
返回(M 代表元 - Mac 上的 alt 键或选项)Run gdb (like this): gdb
更多信息可在此处获得:http: //tedlab.mit.edu/~dr/gdbintro.html
高温高压
您可以将以下用户定义的命令放入~/.gdbinit,然后
% cat ~/.gdbinit
python import os
define less1
python os.popen("less","w").write(gdb.execute("$arg0",to_string=True))
end
define less2
python os.popen("less","w").write(gdb.execute("$arg0 $arg1",to_string=True))
end
...
% gdb
(gdb) less2 info var
...
(gdb) less1 disass
...
Starting with version 9.1, GDB has a pipe
command, so you can send a command's output to the pager of your choice. From the documentation:
pipe [command] | shell_command
Executes command and sends its output to shell_command. Note that no space is needed around|
. If no command is provided, the last command executed is repeated.
这是一个有点旧的线程,但我认为值得添加。@yichun 在这里给出了一个非常好的想法,但为了更实用,它可以扩展到任意数量的参数:
define less
python import os
python os.popen("less","w").write(gdb.execute(' '.join(["$arg{0}".format(i) for i in range(0, argc)]), to_string=True))
end
然后它还可以添加异常处理并等待进程终止以避免键盘故障,我们有这样的事情:
% cat ~/.gdbinit
define less
python argc = $argc
python
import os
f = None
try:
f = os.popen("less","w")
f.write(gdb.execute(' '.join(["$arg{0}".format(i) for i in range(0, argc)]), to_string=True))
except Exception as e:
if f:
f.write(str(e))
else:
print (str(e))
finally:
if f:
f.close()
end
end
In gdb 8.1.1 this code in .gdbinit
adds the required functionality:
python
import os
class Less(gdb.Command):
def __init__(self):
super().__init__("less", gdb.COMMAND_USER, gdb.COMPLETE_COMMAND)
def invoke(self, argstr, from_tty):
with os.popen("less","w") as pipe:
try:
pipe.write(gdb.execute(argstr, to_string=True))
except Exception as e:
pipe.write(str(e))
Less()
end
Usage
(gdb) less info breakpoints
(gdb) less backtrace
Information: Commands In Python.