Введение

Strace — это утилита для диагностики, отладки и обучения пользователей Linux. Она используется для наблюдения и перехвата взаимодействий между процессами и ядром Linux, включая системные вызовы, доставку сигналов и изменения состояния процесса. Работа strace основана на функции ядра ptrace. Некоторые Unix-подобные системы предоставляют другие диагностические инструменты, аналогичные strace, например 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 года была реализована функция внедрения ошибок системных вызовов.