[英]'strace vim/nano' (Ubuntu)
我正在尝试使用 strace,并在一本书中读到了它。
我试着给它奇怪的输入,所以我试着给 nano/vim 作为输入。 例如
strace vim
我注意到两种情况下的输出都非常奇特。
运行后,任何涉及键盘和鼠标的后续操作都会在终端内动态显示 strace 输出,但格式非常奇怪:
[0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)lect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0fsync(3) = 0eout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)lect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)eout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)lect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timselect(1, [0], [], [0], NULL {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)lect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) write(1,select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)te(1, "\33[?25lt\33[25;267H5\33[1;25H\33[?25h", 30t 6
select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)(1, "\33[?25le\33[25;267H7\33[1;27H\33[?25h", 30e 7
select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut) 8
-- INSERT -- sesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut) 1,2 All) = 58 sesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
sewselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)fsdgaeeeaeeec=0, teteaeteae) = 0 (Timeout)
wriwrite(1, "\33[?25lqhdfffsdgaeee\33[11Cteae\33[25"..., 50qhdfffsdgaeee_sec=0, teateae=0}) = 0 (Timeout)
select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
write(1, "\33[1;2H\33[?25h", 12 7
在通过 keymashing 尝试在 vim 中执行写操作时,终端中显示的输出是与我输入的杂项字符相关的 strace 输出,请参阅:
wriwrite(1, "\33[?25lqhdfffsdgaeee\33[11Cteae\33[25"..., 50qhdfffsdgaeee_sec=0, teateae=0}) = 0
谁能解释为什么运行时输出如此奇怪:
strace nano
或者
strace vim
?
即为什么每当按下键盘或鼠标上的按钮或使用鼠标执行滚动操作时都会更新终端中的输出? 谁能从 I/O 的角度具体解释一下在这种情况下 strace 如何与 vim 交互?
您正在跟踪一个试图控制窗口的应用程序,同时 strace 正在记录到该窗口。 相反,试试这个:
在窗口 1 中,运行:
strace -o $HOME/tracefile vim
在窗口 2 中,运行:
tail -f $HOME/tracefile
您可以在窗口 1 中与 vim 交互,并查看 vim 在窗口 2 中进行的调用。完成后,窗口 2 中的CTRL-C将停止尾部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.