Показывать полные аргументы в strace даже в фигурных скобках

Я знаю, что параметр -s должен отображать более длинные аргументы, но он не всегда работает (вероятно, из-за этих фигурных скобок, означающих массив или вложенные аргументы?).

Даже после запуска strace -s1000 my_command этот аргумент все еще усекается:

ioctl(3, SNDCTL_TMR_TEMPO or TCGETA, {B9600 -opost -isig -icanon -echo ...}) = 0

Как я могу увидеть полные аргументы?


person Marki555    schedule 19.12.2015    source источник


Ответы (4)


В параметрах strace есть такая опция - вы должны использовать ключ командной строки -v. Кроме того, благодаря открытому исходному коду этой замечательной утилиты вы можете полностью отключить аббревиатуру, исправив заголовок defs.h в файле strace исходники:

< #define abbrev(tcp)   ((tcp)->qual_flg & QUAL_ABBREV)
---
> #define abbrev(tcp)   0

Я пропатчил таким образом strace-4.9 из моего локального хранилища программных исходников gentoo /usr/portage/distfiles/. Не требуется загружать последние исходники strace с sourceforge.

person Vladimir Kunschikov    schedule 19.12.2015
comment
Аргумент -v работает с версии 4.15 и, кажется, существует с момента создания репозитория Git. - person aitap; 16.11.2017
comment
Интересно, почему это не было замечено в то время. Этот вариант действительно должен работать. Возможно, это не было замечено из-за самого логирования strace, судя по коду там используются какие-то битовые поля и макросы, которые проверяют наличие каких-то битов; так что было намного проще полностью очистить этот чек. - person Vladimir Kunschikov; 20.11.2017
comment
Позор, что с strace 4.11 -v не подчиняется -s максимальной длине строки и зацикливается в моем терминале. - person Ciro Santilli 新疆再教育营六四事件ۍ 15.08.2018

Чтобы подробно описать то, что сказал Владимир Кунщиков — выполните следующие команды:

  1. git clone git://git.code.sf.net/p/strace/code strace-code
  2. cd strace-code
  3. Измените часть файла defs.h, как описано Владимиром Кунщиковым.
  4. ./bootstrap
  5. ./configure
  6. make
  7. make install

Модифицированная версия strace должна была быть установлена ​​в /usr/local/bin/strace. Теперь запустите strace, используя большое значение для параметра -s. Пример:

strace -s 65536 command_to_run_goes_here

Источники:

  1. Ответ Владимира Кунщикова.
  2. https://github.com/strace/strace/issues/2
person Utku    schedule 16.10.2016

Согласно руководству и источник, параметр -v должен помочь вам с большими структурами.

person aitap    schedule 16.11.2017

Здесь проблема не в длине.

./term.c:                       tprintf(" %sopost %sisig %sicanon %secho ...}",

Вы можете добавить сюда больше флагов, если хотите. Флаги определены в /usr/include/asm-generic/termbits.h.

person Gábor    schedule 18.09.2018