问题 使用less作为gdb寻呼机


我注意到在GDB中,当发出具有长输出的命令时 info variables,输出按时显示一页,按 enter 下去和 q 退出。

是否可以用另一个替换默认的寻呼机,例如 less,以便我可以上下导航,退出,搜索等?


10823
2018-04-21 14:25


起源



答案:


是否可以用另一个替换默认的寻呼机

否:GDB不会调用外部程序来显示输出,简单来说就是这样 暂停 每个屏幕输出的输出(你可以让它不停顿 set height 0)。

除了在里面跑步 emacs,你也可以使用 screen 要么 tmux (学习它们通常会在很多其他情况下帮助你),或者要求GDB记录输出(set logging on)然后搜索 gdb.txt 与任何 $PAGER 你要。


7
2018-04-21 15:26



完美:我怀疑它是这样的,但不知道高度为0.我已经在使用了 tmux,所以这是最好的选择!谢谢! - AkiRoss


答案:


是否可以用另一个替换默认的寻呼机

否:GDB不会调用外部程序来显示输出,简单来说就是这样 暂停 每个屏幕输出的输出(你可以让它不停顿 set height 0)。

除了在里面跑步 emacs,你也可以使用 screen 要么 tmux (学习它们通常会在很多其他情况下帮助你),或者要求GDB记录输出(set logging on)然后搜索 gdb.txt 与任何 $PAGER 你要。


7
2018-04-21 15:26



完美:我怀疑它是这样的,但不知道高度为0.我已经在使用了 tmux,所以这是最好的选择!谢谢! - AkiRoss


gdb 代替 emacs 你应该能够使用emacs的分页命令。

  1. 运行emacs
  2. 类型 M-x gdb return(M代表meta-alt键或Mac上的选项)
  3. Emacs消息栏现在将显示消息: Run gdb (like this): gdb 

更多信息请点击这里: http://tedlab.mit.edu/~dr/gdbintro.html

HTH


3
2018-04-21 14:38





您可以在〜/ .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
...

3
2017-08-06 04:27



Traceback (most recent call last): File "<string>", line 1, in <module> NameError: name 'os' is not defined Error while executing Python code. - Barry
请先在.gdbinit中添加“python import os”。 - yichun
看起来GDB 8.0可能已经改变了 python 和 $arg<n> 内插一个 define 工作。有没有人在GDB 8中工作? - Jeremy Muhlich