'strace vim / nano' (Ubuntu) - PullRequest
       0

'strace vim / nano' (Ubuntu)

0 голосов
/ 26 февраля 2020

Я экспериментировал со стразами, прочитав об этом в книге.

Я пытался дать ему странный ввод, поэтому я попытался дать nano / vim в качестве ввода. Например,

strace vim

Я заметил, что вывод был очень специфическим в обоих случаях.

После запуска любое последующее действие, включающее клавиатуру и мышь, динамически отображает вывод строки в терминале, но имеет действительно странный формат:

[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

После нажатия клавиши, чтобы попытаться выполнить операцию записи в vim, среди выходных данных, отображаемых в терминале, были выходные данные strace, относящиеся к различным набираемым мной символам, см .:

 wriwrite(1, "\33[?25lqhdfffsdgaeee\33[11Cteae\33[25"..., 50qhdfffsdgaeee_sec=0, teateae=0}) = 0

Кто-нибудь может объяснить, почему вывод такой странный при работе:

strace nano

или

strace vim

?

А именно, почему вывод в терминале обновляется при каждом нажатии кнопки на клавиатуре или мыши или при выполнении операции прокрутки с помощью мыши? Может ли кто-нибудь конкретно объяснить, как strace взаимодействует с vim в этом случае с точки зрения ввода / вывода?

1 Ответ

2 голосов
/ 26 февраля 2020

Вы отслеживаете приложение, которое пытается управлять окном, в то время как strace регистрируется в этом окне. Вместо этого попробуйте следующее:

В окне 1 запустите:

strace -o $HOME/tracefile vim

В окне 2 запустите:

tail -f $HOME/tracefile

Вы можете взаимодействовать с vim в окне 1 и посмотрите, какие вызовы vim делает в окне 2. Когда вы закончите, CTRL- C в окне 2 остановит хвост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...