Введение
Strace — это утилита для диагностики, отладки и обучения пользователей Linux. Она используется для наблюдения и перехвата взаимодействий между процессами и ядром Linux, включая системные вызовы, доставку сигналов и изменения состояния процесса. Работа strace основана на функции ядра ptrace. Некоторые Unix-подобные системы предоставляют другие диагностические инструменты, аналогичные strace, например truss.
strace is a diagnostic, debugging and instructional userspace utility for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state. The operation of strace is made possible by the kernel feature known as ptrace. Some Unix like systems provide other diagnostic tools similar to strace, such as truss.
История
Strace был первоначально написан для SunOS Полом Краненбургом в 1991 году, согласно уведомлению об авторских правах, и опубликован в начале 1992 года в третьем томе comp.sources.sun. Первоначальный файл README содержал следующее: «является трассировщиком системных вызовов для систем Sun(tm), аналогичным программе , поставляемой Sun. Это полезная утилита для отладки программ, исходный код которых недоступен, что, к сожалению, относится почти ко всему системному программному обеспечению Sun». Позже Бранко Ланкестер портировал эту версию на Linux, выпустив свою версию в ноябре 1992 года, а второй релиз последовал в 1993 году. Ричард Сладки объединил эти отдельные версии strace в 1993 году и портировал программу на SVR4 и Solaris в 1994 году, в результате чего появился strace 3.0, который был анонсирован в comp.sources.misc в середине 1994 года. Начиная с 1996 года, strace поддерживался Вихертом Аккерманом. В течение его работы разработка strace была перенесена в CVS; были добавлены порты для FreeBSD и многих архитектур Linux (включая ARM, IA 64, MIPS, PA RISC, PowerPC, s390, SPARC). В 2002 году ответственность за поддержку strace была передана Роланду МакГрату. С тех пор strace получил поддержку нескольких новых архитектур Linux (AMD64, s390x, SuperH), поддержку би-архитектуры для некоторых из них, а также множество дополнений и улучшений в декодерах системных вызовов для Linux; разработка strace была перенесена в git в течение этого периода. С 2009 года strace активно поддерживается Дмитрием Левиным. С тех пор strace получил поддержку архитектур AArch64, ARC, AVR32, Blackfin, Meta, Nios II, OpenSISC 1000, RISC V, Tile/TileGx, Xtensa. Последней версией strace, содержащей некоторый (очевидно, устаревший) код для операционных систем, отличных от Linux, была версия 4.6, выпущенная в марте 2011 года. В версии 4.7, выпущенной в мае 2012 года, весь код, не относящийся к Linux, был удален; с версии 4.13 проект следует графику выпуска ядра Linux, а с версии 5.0 — схеме версионирования Linux. В 2012 году strace также получил поддержку трассировки путей и декодирования путей дескрипторов файлов. В августе 2014 года был выпущен strace 4.9, в котором была добавлена поддержка печати трассировок стека. В декабре 2016 года была реализована функция внедрения ошибок системных вызовов.
is a system call tracer for Sun(tm) systems much like the Sun supplied program is a useful utility to sort of debug programs for which no source is available which unfortunately includes almost all of the Sun supplied system software. Later, Branko Lankester ported this version to Linux, releasing his version in November 1992 with the second release following in 1993. Richard Sladkey combined these separate versions of strace in 1993, and ported the program to SVR4 and Solaris in 1994, resulting in strace 3.0 that was announced in comp. sources. misc in mid 1994. Beginning in 1996, strace was maintained by Wichert Akkerman. During his tenure, strace development migrated to CVS; ports to FreeBSD and many architectures on Linux (including ARM, IA 64, MIPS, PA RISC, PowerPC, s390, SPARC) were introduced. In 2002, the burden of strace maintainership was transferred to Roland McGrath. Since then, strace gained support for several new Linux architectures (AMD64, s390x, SuperH), bi architecture support for some of them, and received numerous additions and improvements in syscalls decoders on Linux; strace development migrated to git during that period. Since 2009, strace is actively maintained by Dmitry Levin. strace gained support for AArch64, ARC, AVR32, Blackfin, Meta, Nios II, OpenSISC 1000, RISC V, Tile/TileGx, Xtensa architectures since that time. The last version of strace that had some (evidently dead) code for non Linux operating systems was 4.6, released in March 2011. In strace version 4.7, released in May 2012, all non Linux code had been removed; since strace 4.13, the project follows Linux kernel's release schedule, and with the version 5.0, it follows Linux's versioning scheme as well. In 2012 strace also gained support for path tracing and file descriptor path decoding. In August 2014, strace 4.9 was released, where support for stack traces printing was added. In December 2016, syscall fault injection feature was implemented.