Strace - Strace
Оригинальный автор (ы) | Пауль Краненбург |
---|---|
Разработчики) | Дмитрий Левин |
Стабильный выпуск | 5.9[1] / 24 сентября 2020 г. |
Репозиторий | |
Написано в | C[2] |
Операционная система | Linux |
Платформа | AArch64, DEC Alpha, ARC, ARM EABI / OABI, AVR32, Blackfin, C-НЕБО, HP PA-RISC, IA-32, IA-64, Motorola 68k, Воображение МЕТА, MicroBlaze, MIPS, Ниос II, OpenRISC, Питание ISA 32/64 бит, RISC-V, Система / 390 /z / Архитектура, SuperH 32/64 бит, SPARC 32/64 бит, ПЛИТКА, TILEPro, TILE-Gx, x86-64, x32 ABI, Xtensa |
Доступно в | английский |
Тип | Отладка |
Лицензия | LGPL v2.1 + |
Интернет сайт | Strace |
Strace диагностический, отладка и учебные пространство пользователя полезность для Linux. Он используется для отслеживания и вмешательства во взаимодействие между процессы и Ядро Linux, который включает в себя системные вызовы, сигнал поставки и изменения состояния процесса. Работа strace стала возможной благодаря функции ядра, известной как ptrace.
Немного Unix-подобный системы предоставляют другие диагностические инструменты, аналогичные strace, такие как ферма.
История
Strace изначально был написан для SunOS авторства Пола Краненбурга в 1991 г., согласно уведомлению об авторских правах и опубликованному в начале 1992 г. в третьем томе comp.sources.sun. Начальный ПРОЧТИ МЕНЯ файл содержал следующее:[3]
Strace (1) трассировщик системных вызовов для систем Sun (TM), очень похожий на программу, поставляемую Sun след (1). Strace (1) - полезная утилита для сортировки программ отладки, исходные коды которых отсутствуют, и которая, к сожалению, включает почти все системное программное обеспечение, поставляемое Sun.
Позже Бранко Ланкестер перенес эту версию на Linux, выпустив свою версию в ноябре 1992 года, а второй - в 1993 году.[4][5] Ричард Сладки объединил эти отдельные версии strace в 1993 году и перенес программу на SVR4 и Солярис в 1994 г.[6] в результате появился strace 3.0, о котором было объявлено в comp.sources.misc в середине 1994 года.[7]
Начиная с 1996 года, strace обслуживает Вихерт Аккерман. За время его пребывания на этом посту развитие strace перешло на CVS; порты в FreeBSD были представлены многие архитектуры Linux (включая ARM, IA-64, MIPS, PA-RISC, PowerPC, s390, SPARC). В 2002 году бремя поддержки strace было передано Роланду МакГрату. С тех пор strace получил поддержку нескольких новых архитектур Linux (AMD64, s390x, SuperH), поддержку двух архитектур для некоторых из них, а также получил многочисленные дополнения и улучшения в декодерах системных вызовов в Linux; разработка strace перешла на мерзавец в тот период. С 2009 года strace активно поддерживает Дмитрий Левин. С тех пор strace получил поддержку архитектур AArch64, ARC, AVR32, Blackfin, Meta, Nios II, OpenSISC 1000, RISC-V, Tile / TileGx, Xtensa.
Последняя версия strace, в которой были (очевидно, мертвые)[8] код для не-Linux Операционная система была 4.6, выпущена в марте 2011 года.[9] В версии strace 4.7, выпущенной в мае 2012 года,[10] весь код, отличный от Linux, был удален;[11] начиная со strace 4.13,[12] проект следует графику выпуска ядра Linux, а с версией 5.0[13] он также следует схеме управления версиями Linux.
В 2012 году strace также получил поддержку трассировки путей и декодирования путей к файловым дескрипторам.[14] В августе 2014 года была выпущена strace 4.9.[15][16], где была добавлена поддержка печати трассировки стека. В декабре 2016 г.[17][18], системный вызов введение неисправности функция была реализована.
История версий
Версия | Дата выхода |
---|---|
5.9 | 24 сентября 2020 г.[19] |
5.8 | 6 августа 2020[20] |
5.7 | 1 июня 2020 г.[21] |
5.6 | 7 апреля 2020 г.[22] |
5.5 | 6 февраля 2020 г.[23] |
5.4 | 28 ноября 2019 г.[24] |
5.3 | 25 сентября 2019 г.[25] |
5.2 | 12 июля 2019 г.[26] |
5.1 | 22 мая 2019[27] |
5.0 | 19 марта 2019 г.[28] |
4.26 | 26 декабря 2018 г.[29] |
4.25 | 30 октября 2018 г.[30] |
4.24 | 14 августа 2018 г.[31] |
4.23 | 14 июня 2018 г.[32] |
4.22 | 5 апреля 2018 г.[33] |
4.21 | 13 февраля 2018 г.[34] |
4.20 | 13 ноября 2017 г.[35] |
4.19 | 5 сентября 2017 г.[36] |
4.18 | 5 июля 2017 г.[37] |
4.17 | 24 мая 2017[38] |
4.16 | 14 февраля 2017 г.[39] |
4.15 | 14 декабря 2016 г.[40] |
4.14 | 4 октября 2016 г.[41] |
4.13 | 26 июля 2016 г.[42] |
4.12 | 31 мая 2016[43] |
4.11 | 21 декабря 2015 г.[44] |
4.10 | 6 марта 2015 г.[45] |
4.9 | 15 августа 2014 г.[46] |
4.8 | 3 июня 2013 г.[47] |
4.7 | 2 мая 2012[48] |
4.6 | 15 марта 2011 г.[49] |
4.5.20 | 13 апреля 2010 г. |
4.5.19 | 21 октября 2009 г. |
4.5.18 | 28 августа 2008 г. |
4.5.17 | 21 июля 2008 г. |
4.5.16 | 3 августа 2007 г. |
4.5.15 | 16 января 2007 г. |
4.5.14 | 16 января 2007 г. |
4.5.13 | 3 августа 2005 г. |
4.5.12 | 8 июня 2005 г. |
4.5.11 | 22 марта 2005 г. |
4.5.10 | 13 марта 2005 г. |
4.5.9 | 4 февраля 2004 г. |
4.5.8 | 19 октября 2004 г. |
4.5.7 | 31 августа 2004 г. |
4.5.6 | 12 июля 2004 г. |
4.5.5 | 27 июня 2004 г. |
4.5.4 | 3 июня 2004 г. |
4.5.3 | 16 апреля 2004 г. |
4.5.2 | 1 марта 2004 г. |
4.5.1 | 13 ноября 2003 г. |
4.5 | 24 сентября 2003 г. |
4.4 | 19 августа 2001 г. |
4.3.1 | 7 апреля 2001 г. |
4.3 | 1 апреля 2001 г. |
4.2 | 21 января 2000 г. |
4.1 | 26 ноября 1999 г. |
4.0.1 | 25 июля 1999 г. |
4.0 | 9 июля 1999 г. |
3.99.1 | 9 июня 1999 г. |
3.99 | 27 апреля 1999 г. |
3.1 | 1 июня 1996 г. |
3.0 | 9 июля 1994 г.[50] |
Использование и особенности
Чаще всего используется для запуска программы с помощью strace, который выводит список системных вызовов, выполненных программой. Это полезно, если программа постоянно дает сбой или ведет себя не так, как ожидалось; например, использование strace может показать, что программа пытается получить доступ к файлу, который не существует или не может быть прочитан.
Альтернативное приложение - использовать -п
флаг для прикрепления к запущенному процессу. Это полезно, если процесс перестал отвечать, и может показать, например, что процесс блокируется при попытке установить сетевое соединение.
Среди других функций strace позволяет:
- Указание фильтра имен системных вызовов, которые следует отслеживать (через
-e след =
вариант): по имени, например клон, вилка, vfork; используя одну из предопределенных групп, например % ipc или же %файл; или (начиная со strace 4.17) с использованием синтаксиса регулярных выражений, например-e след = / часы _. *
. - Указание списка трассируемых путей (
-P /etc/ld.so.cache
, Например). - Указание списка файловых дескрипторов, ввод / вывод которых должен быть сброшен (
-e читать =
и-e написать =
опции). - Подсчет времени выполнения системного вызова и подсчет (
-T
,-c
,-C
, и-w
опции). - Печать отметок относительного или абсолютного времени (
-t
и-р
опции). - Изменение кода возврата и ошибки указанных системных вызовов и внедрение сигналов при их выполнении (начиная с strace 4.15,
-e вводить =
вариант). - Извлечение информации о файловых дескрипторах (включая сокеты,
-у
вариант). - Печать трассировок стека, включая (начиная со strace 4.21) расшифровку символов (
-k
вариант). - Фильтрация по статусу возврата системного вызова (
-e статус =
вариант; начиная со strace 5.2[51]).
strace поддерживает декодирование аргументов некоторых классов ioctl команды, такие как BTRFS_ *, V4L2_ *, DM_ *, NSFS_ *, MEM *, EVIO *, KVM_ *, и несколько других.
Поскольку strace детализирует только системные вызовы, его нельзя использовать для обнаружения такого количества проблем, как отладчик кода, такой как Отладчик GNU (ГДБ). Однако его проще использовать, чем отладчик кода, и он является очень полезным инструментом для системных администраторов. Он также используется исследователями для генерации трассировки системных вызовов на будущее. повтор системного вызова.[52][53][54]
Примеры
Ниже приведен пример типичного вывода Strace
команда:
пользователь @ сервер: ~ $ strace ls...open (".", O_RDONLY | O_NONBLOCK | O_LARGEFILE | O_DIRECTORY | O_CLOEXEC) = 3fstat64 (3, {st_mode = S_IFDIR | 0755, st_size = 4096, ...}) = 0fcntl64 (3, F_GETFD) = 0x1 (флаги FD_CLOEXEC)getdent64 (3, / * 18 записей * /, 4096) = 496getdent64 (3, / * 0 записей * /, 4096) = 0закрыть (3) = 0fstat64 (1, {st_mode = S_IFIFO | 0600, st_size = 0, ...}) = 0mmap2 (NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f2c000write (1, "autofsbackupscacheflexlmgames" ..., 86autofsA
Приведенный выше фрагмент - лишь небольшая часть вывода strace при запуске на 'ls команда. Он показывает, что текущий рабочий каталог открыт, проверяется и извлекается его содержимое. Полученный список имен файлов выводится на стандартный вывод.
Подобные инструменты
В разных операционных системах есть другие похожие или родственные приборы инструменты, предлагающие аналогичные или более продвинутые функции; некоторые инструменты (хотя и используют то же или похожее имя) могут использовать совершенно разные механизмы работы, что приводит к разным наборам функций или результатам. К таким инструментам можно отнести следующее:
- Linux имеет ltrace который может отслеживать библиотечные и системные вызовы, xtrace что может отследить X Window программы,[55] SystemTap, перф, и трассировка-cmd и KernelShark которые расширяют ftrace.
- AIX предоставляет ферма команда
- HP-UX предлагает Тоск команда
- Солярис / Иллюмос имеет ферму и DTrace
- UnixWare предоставляет ферма команда
- FreeBSD предоставляет ферма команда ktrace и DTrace
- NetBSD обеспечивает ktrace и DTrace
- OpenBSD использует ktrace и kdump
- macOS обеспечивает ktrace (10.4 и ранее), DTrace (из Solaris) и связанный dtruss в 10.5 и новее.[56]
- MS Windows есть аналогичная утилита под названием StraceNT, написанная Панкадж Гарг,[57] и аналогичный GUI -основанная утилита называется Монитор процесса, разработан Sysinternals.
Смотрите также
Рекомендации
- ^ "Strace 5.9 выпущен" (Список рассылки). 2020-09-24. Получено 2020-09-24.
- ^ https://openhub.net/p/strace
- ^ Пол Краненбург (2 марта 1992 г.). "Strace - альтернативный трассировщик системных вызовов". Группа новостей: comp.sources.sun.
- ^ Бранко Ланкестер (5 ноября 1992 г.). "первая версия strace для Linux".
- ^ Бранко Ланкестер (18 июня 1993 г.). "второй выпуск strace для Linux".
- ^ "strace". manned.org. 21 июня 1994 г.
- ^ "Индекс SUNET /pub/usenet/ftp.uu.net/comp.sources.misc/volume43/strace". Получено 14 января, 2015.
- ^ Денис Власенко (7 февраля 2012 г.). "Как насчет удаления кода, отличного от Linux?".
- ^ Левин Дмитрий Валерьевич (16 марта 2011 г.). "strace 4.6 выпущен".
- ^ Левин Дмитрий Валерьевич (2 мая 2012 г.). "strace 4.7 выпущен".
- ^ Левин Дмитрий Валерьевич (20 апреля 2012 г.). «Примечательные изменения в версии 4.7».
- ^ Левин Дмитрий Валерьевич (4 октября 2016 г.). "Strace 4.14 выпущен".
- ^ Левин Дмитрий Васильевич (19 марта 2019 г.). "strace 5.0 выпущен".
- ^ Левин Дмитрий Валерьевич (1 мая 2012 г.). «Примечательные изменения в версии 4.7».
- ^ Левин Дмитрий Васильевич (15 августа 2014 г.). "strace 4.9 выпущен".
- ^ Левин Дмитрий Васильевич (15 августа 2014 г.). «Примечательные изменения в версии 4.9».
- ^ Левин Дмитрий Валерьевич (14 декабря 2016 г.). "Выпущен strace 4.15".
- ^ Левин Дмитрий Валерьевич (14 декабря 2016 г.). «Примечательные изменения в версии 4.15».
- ^ Левин Дмитрий Валерьевич (24.09.2020). "Strace 5.9 выпущен".
- ^ Левин Дмитрий Валерьевич (06.08.2020). "strace 5.8 выпущен".
- ^ Левин Дмитрий Валерьевич (01.06.2020). "Strace 5.7 выпущен".
- ^ Левин Дмитрий Валерьевич (07.04.2020). "strace 5.6 выпущен".
- ^ Левин Дмитрий Валерьевич (06.02.2020). "strace 5.5 выпущен".
- ^ Левин Дмитрий Валерьевич (2019-11-28). "strace 5.4 выпущен".
- ^ Левин Дмитрий Валерьевич (2019-09-25). "strace 5.3 выпущен".
- ^ Левин Дмитрий Валерьевич (2019-07-12). "strace 5.2 выпущен".
- ^ Левин Дмитрий Валерьевич (22.05.2019). "strace 5.1 выпущен".
- ^ Левин Дмитрий Валерьевич (19.03.2019). "strace 5.0 выпущен".
- ^ Левин Дмитрий Валерьевич (26.12.2018). "Strace 4.26 выпущен".
- ^ Левин Дмитрий Валерьевич (30.10.2018). "Strace 4.25 выпущен".
- ^ Левин Дмитрий Валерьевич (14.08.2018). "strace 4.24 выпущен".
- ^ Левин Дмитрий Валерьевич (14.06.2018). "Strace 4.23 выпущен".
- ^ Левин Дмитрий Валерьевич (2018-04-05). "Strace 4.22 выпущен".
- ^ Левин Дмитрий Валерьевич (13.02.2018). "Strace 4.21 выпущен".
- ^ Левин Дмитрий Валерьевич (13.11.2017). "Strace 4.20 выпущен".
- ^ Левин Дмитрий Васильевич (05.09.2017). "Выпущена strace 4.19".
- ^ Левин Дмитрий Васильевич (05.07.2017). "Выпущен strace 4.18".
- ^ Левин Дмитрий Васильевич (24.05.2017). "Strace 4.17 выпущен".
- ^ Левин Дмитрий Валерьевич (14.02.2017). "Выпущен strace 4.16".
- ^ Левин Дмитрий Васильевич (14.12.2016). "Выпущен strace 4.15".
- ^ Левин Дмитрий Васильевич (04.10.2016). "Strace 4.14 выпущен".
- ^ Левин Дмитрий Валерьевич (26.07.2016). "Выпущен strace 4.13".
- ^ Левин Дмитрий Васильевич (2016-05-31). "Strace 4.12 выпущен".
- ^ Левин Дмитрий Васильевич (21.12.2015). "Strace 4.11 выпущен".
- ^ Левин Дмитрий Валерьевич (06.03.2015). "Strace 4.10 выпущен".
- ^ Левин Дмитрий Валерьевич (2014-08-15). "strace 4.9 выпущен".
- ^ Левин Дмитрий Васильевич (03.06.2013). "strace 4.8 выпущен".
- ^ Левин Дмитрий Валерьевич (2012-05-02). "strace 4.7 выпущен".
- ^ Левин Дмитрий Васильевич (15.03.2011). "strace 4.6 выпущен".
- ^ Рик Слэдки (1994-07-09). "v43i075: strace - трассировщик системных вызовов для sunos, linux, svr4, solaris2, Part01 / 10".
- ^ Его сокращение для отображения только успешных звонков,
-z
option, изначально был добавлен в strace 4.5, но так и не был задокументирован, так как работал некорректно. - ^ Хорки, Иржи (2013). "Профилировщик ввода-вывода ioapps и повторитель трассировок ввода-вывода". Получено 2013-09-16.
- ^ Уотерленд, Амос (2007). "Воспроизведение системного вызова sreplay". Получено 2013-09-16.
- ^ Бертон, Ариэль (1998). «Характеристика рабочей нагрузки с использованием облегченной трассировки и повторного выполнения системных вызовов» (PDF). Получено 2013-09-16.
- ^ «XTrace - трассировка соединений протокола X». xtrace.alioth.debian.org. Получено 2014-08-12.
- ^ "dtrace (1) Страница руководства Mac OS X". Developer.apple.com. Получено 2014-07-23.
- ^ «IntellectualHeaven - Strace для Windows». Intelligentheaven.com. Получено 29 января 2015.
внешняя ссылка
- страница проекта strace
- Страница руководства
- Статья обзоров ОС на strace
- "Отслеживание системных вызовов с помощью strace", доклад с обзором функций и использования strace, предоставленный Майкл Керриск в NDC TechTown 2018
- «Современный Strace» (источник ), доклад с обзором возможностей strace, сделанный Дмитрием Левиным на DevConf.cz 2019