strace 4.17
strace — утилита для диагностики и отладки программ для ОС, использующих ядро Linux. Она позволяет отслеживать и (начиная с версии 4.15) вмешиваться в процесс взаимодействия программы и ядра, включая происходящие системные вызовы, возникающие сигналы и изменения состояния процесса. Для своей работы strace использует механизм ptrace. Начиная с версии 4.13 формирование выпусков strace синхронизировано с выходом новых версий Linux.
Основные изменения этого релиза:
- Оптимизирована фильтрация системных вызовов за счёт уменьшения количества вызовов
ptrace()
для системных вызовов, отображение которых отключено. - Добавлена поддержка декодирования системного вызова statx (2), появившегося в Linux 4.11.
- Добавлена поддержка декодирования команд ioctl (2), связанных с операциями над пространствами имён.
- Для ioctl подсистемы Video4Linux добавлена поддержка декодирования не декодировавшихся ранее типов
V4L2_BUF_TYPE_*
, а также командVIDIOC_S_TUNER
иVIDIOC_G_TUNER
. - Реализована поддержка декодирования сообщений
NLMSG_ERROR
протокола netlink. - Улучшено декодирование системного вызова sched_setattr (2), команды
BPF_PROG_ATTACH
системного вызова bpf (2), некорректных аргументов команд подсистемы device mapper системного вызова ioctl (2). - Классы системных вызовов, указываемые в аргументе
-e trace=
(такие какprocess
,file
,network
,ipc
,desc
,memory
), теперь должны начинаться со знака%
:-e trace=%memory
. Старый синтаксис без указания знака процента (-e trace=memory
) всё так же поддерживается, но теперь считается устаревшим. - Добавлены новые классы системных вызовов для указания их фильтрации:
%stat
(варианты системного вызова stat (2) на разных архитектурах),%lstat
(варианты системного вызова lstat (2)),%fstat
(варианты системных вызовов fstat (2) и fstatat (2)),%%stat
(все вызовы, возвращающие статусную информацию о файле, включая statx (2)),%statfs
(варианты системного вызова statfs (2)),%fstatfs
(варианты системного вызова fstatfs (2)),%%statfs
(все вызовы, возвращающие статусную информацию о файловой системе, включая ustat (2)). - Добавлена возможность указания регулярного выражения для задания множества фильтруемых системных вызовов, например,
-e trace=/sched_.*
. - Добавлена возможность игнорирования ошибки, возникающей в случае, если множество системных вызовов, соответствующее указанному фильтру, пустое, например
-e trace=?statx
на архитектурах, которые не поддерживают системный вызов statx (2). - Добавлена поддержка декодирования маски сигналов в системном вызове rt_sigreturn (2) для архитектур alpha, arc, arm, avr32, bfin, cris, hppa, m68k, metag, microblaze, mips, nios2, or1k, powerpc, powerpc64, riscv, sh, sh64, sparc, sparc64, tile, x86 и xtensa.
- Исправлено декодирование аргумента флагов в системных вызовах preadv2(2) и pwritev2(2) на ABI x32.
- Исправлено декодирование старого варианта системного вызова sigsuspend (2) на архитектурах alpha, cris, mips, powerpc, powerpc64, sh, sh64, sparc и sparc64.
- Исправлено декодирование системных вызовов sgetmask (2) и ssetmask (2) на 64-битных архитектурах.
- Обойдена ошибка компилятора GCC, приводящая к генерации некорректного кода на ядрах для архитектуры aarch64, вследствие которой третий аргумент системного вызова sched_getattr (2) не вполне 32-битный.
Также, среди изменений, вошедших в предыдущий релиз 4.16, можно отметить следующие:
- В механизм подмены системного вызова добавлена поддержка указания возвращаемого значения (
-e inject=SET:retval=
) и возбуждения сигнала (-e inject=SET:signal=
) - Добавлена поддержка декодирования системного вызова ustat (2).
- Реализована поддержка декодирования команд
BPF_OBJ_PIN
,BPF_OBJ_GET
,BPF_PROG_ATTACH
иBPF_PROG_DETACH
системного вызова bpf (2). - Существенно доработана поддержка декодирования команд SCSI системного вызова ioctl (2): добавлена поддержка декодирования всех не доекодировавшихся ранее команд
SG_*
, а также структурsg_io_hdr
иsg_io_v4
. - Улучшено декодирование системных вызовов get_robust_list (2), getrandom (2), io_submit (2), set_robust_list (2).
- Исправлено декодирование структур
ifconf
,ifreq
, andloop_info
для ABI, отличающихся от ABI ядра. - Исправлено декодирование системных вызовов kexec_file_load (2), mprotect (2), pkey_mprotect (2), prctl (2), preadv (2)/preadv2(2), pwritev (2)/pwritev2(2) на ABI x32.
>>> Полный список изменений
>>> Сайт проекта (sourceforge)
>>> Репозиторий (sourceforge)
>>> Сообщение в списке рассылки