繁体   English   中英

'strace vim/nano' (Ubuntu)

[英]'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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM