Strace - Strace

Strace
Strace logo.svg
Оригинальный автор (ы)Пауль Краненбург
Разработчики)Дмитрий Левин
Стабильный выпуск
5.9[1] / 24 сентября 2020 г.; 60 дней назад (2020-09-24)
Репозиторий Отредактируйте это в Викиданных
Написано в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.io

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.924 сентября 2020 г.[19]
5.86 августа 2020[20]
5.71 июня 2020 г.[21]
5.67 апреля 2020 г.[22]
5.56 февраля 2020 г.[23]
5.428 ноября 2019 г.[24]
5.325 сентября 2019 г.[25]
5.212 июля 2019 г.[26]
5.122 мая 2019[27]
5.019 марта 2019 г.[28]
4.2626 декабря 2018 г.[29]
4.2530 октября 2018 г.[30]
4.2414 августа 2018 г.[31]
4.2314 июня 2018 г.[32]
4.225 апреля 2018 г.[33]
4.2113 февраля 2018 г.[34]
4.2013 ноября 2017 г.[35]
4.195 сентября 2017 г.[36]
4.185 июля 2017 г.[37]
4.1724 мая 2017[38]
4.1614 февраля 2017 г.[39]
4.1514 декабря 2016 г.[40]
4.144 октября 2016 г.[41]
4.1326 июля 2016 г.[42]
4.1231 мая 2016[43]
4.1121 декабря 2015 г.[44]
4.106 марта 2015 г.[45]
4.915 августа 2014 г.[46]
4.83 июня 2013 г.[47]
4.72 мая 2012[48]
4.615 марта 2011 г.[49]
4.5.2013 апреля 2010 г.
4.5.1921 октября 2009 г.
4.5.1828 августа 2008 г.
4.5.1721 июля 2008 г.
4.5.163 августа 2007 г.
4.5.1516 января 2007 г.
4.5.1416 января 2007 г.
4.5.133 августа 2005 г.
4.5.128 июня 2005 г.
4.5.1122 марта 2005 г.
4.5.1013 марта 2005 г.
4.5.94 февраля 2004 г.
4.5.819 октября 2004 г.
4.5.731 августа 2004 г.
4.5.612 июля 2004 г.
4.5.527 июня 2004 г.
4.5.43 июня 2004 г.
4.5.316 апреля 2004 г.
4.5.21 марта 2004 г.
4.5.113 ноября 2003 г.
4.524 сентября 2003 г.
4.419 августа 2001 г.
4.3.17 апреля 2001 г.
4.31 апреля 2001 г.
4.221 января 2000 г.
4.126 ноября 1999 г.
4.0.125 июля 1999 г.
4.09 июля 1999 г.
3.99.19 июня 1999 г.
3.9927 апреля 1999 г.
3.11 июня 1996 г.
3.09 июля 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 команда. Он показывает, что текущий рабочий каталог открыт, проверяется и извлекается его содержимое. Полученный список имен файлов выводится на стандартный вывод.

Подобные инструменты

В разных операционных системах есть другие похожие или родственные приборы инструменты, предлагающие аналогичные или более продвинутые функции; некоторые инструменты (хотя и используют то же или похожее имя) могут использовать совершенно разные механизмы работы, что приводит к разным наборам функций или результатам. К таким инструментам можно отнести следующее:

Смотрите также

Рекомендации

  1. ^ "Strace 5.9 выпущен" (Список рассылки). 2020-09-24. Получено 2020-09-24.
  2. ^ https://openhub.net/p/strace
  3. ^ Пол Краненбург (2 марта 1992 г.). "Strace - альтернативный трассировщик системных вызовов". Группа новостейcomp.sources.sun.
  4. ^ Бранко Ланкестер (5 ноября 1992 г.). "первая версия strace для Linux".
  5. ^ Бранко Ланкестер (18 июня 1993 г.). "второй выпуск strace для Linux".
  6. ^ "strace". manned.org. 21 июня 1994 г.
  7. ^ "Индекс SUNET /pub/usenet/ftp.uu.net/comp.sources.misc/volume43/strace". Получено 14 января, 2015.
  8. ^ Денис Власенко (7 февраля 2012 г.). "Как насчет удаления кода, отличного от Linux?".
  9. ^ Левин Дмитрий Валерьевич (16 марта 2011 г.). "strace 4.6 выпущен".
  10. ^ Левин Дмитрий Валерьевич (2 мая 2012 г.). "strace 4.7 выпущен".
  11. ^ Левин Дмитрий Валерьевич (20 апреля 2012 г.). «Примечательные изменения в версии 4.7».
  12. ^ Левин Дмитрий Валерьевич (4 октября 2016 г.). "Strace 4.14 выпущен".
  13. ^ Левин Дмитрий Васильевич (19 марта 2019 г.). "strace 5.0 выпущен".
  14. ^ Левин Дмитрий Валерьевич (1 мая 2012 г.). «Примечательные изменения в версии 4.7».
  15. ^ Левин Дмитрий Васильевич (15 августа 2014 г.). "strace 4.9 выпущен".
  16. ^ Левин Дмитрий Васильевич (15 августа 2014 г.). «Примечательные изменения в версии 4.9».
  17. ^ Левин Дмитрий Валерьевич (14 декабря 2016 г.). "Выпущен strace 4.15".
  18. ^ Левин Дмитрий Валерьевич (14 декабря 2016 г.). «Примечательные изменения в версии 4.15».
  19. ^ Левин Дмитрий Валерьевич (24.09.2020). "Strace 5.9 выпущен".
  20. ^ Левин Дмитрий Валерьевич (06.08.2020). "strace 5.8 выпущен".
  21. ^ Левин Дмитрий Валерьевич (01.06.2020). "Strace 5.7 выпущен".
  22. ^ Левин Дмитрий Валерьевич (07.04.2020). "strace 5.6 выпущен".
  23. ^ Левин Дмитрий Валерьевич (06.02.2020). "strace 5.5 выпущен".
  24. ^ Левин Дмитрий Валерьевич (2019-11-28). "strace 5.4 выпущен".
  25. ^ Левин Дмитрий Валерьевич (2019-09-25). "strace 5.3 выпущен".
  26. ^ Левин Дмитрий Валерьевич (2019-07-12). "strace 5.2 выпущен".
  27. ^ Левин Дмитрий Валерьевич (22.05.2019). "strace 5.1 выпущен".
  28. ^ Левин Дмитрий Валерьевич (19.03.2019). "strace 5.0 выпущен".
  29. ^ Левин Дмитрий Валерьевич (26.12.2018). "Strace 4.26 выпущен".
  30. ^ Левин Дмитрий Валерьевич (30.10.2018). "Strace 4.25 выпущен".
  31. ^ Левин Дмитрий Валерьевич (14.08.2018). "strace 4.24 выпущен".
  32. ^ Левин Дмитрий Валерьевич (14.06.2018). "Strace 4.23 выпущен".
  33. ^ Левин Дмитрий Валерьевич (2018-04-05). "Strace 4.22 выпущен".
  34. ^ Левин Дмитрий Валерьевич (13.02.2018). "Strace 4.21 выпущен".
  35. ^ Левин Дмитрий Валерьевич (13.11.2017). "Strace 4.20 выпущен".
  36. ^ Левин Дмитрий Васильевич (05.09.2017). "Выпущена strace 4.19".
  37. ^ Левин Дмитрий Васильевич (05.07.2017). "Выпущен strace 4.18".
  38. ^ Левин Дмитрий Васильевич (24.05.2017). "Strace 4.17 выпущен".
  39. ^ Левин Дмитрий Валерьевич (14.02.2017). "Выпущен strace 4.16".
  40. ^ Левин Дмитрий Васильевич (14.12.2016). "Выпущен strace 4.15".
  41. ^ Левин Дмитрий Васильевич (04.10.2016). "Strace 4.14 выпущен".
  42. ^ Левин Дмитрий Валерьевич (26.07.2016). "Выпущен strace 4.13".
  43. ^ Левин Дмитрий Васильевич (2016-05-31). "Strace 4.12 выпущен".
  44. ^ Левин Дмитрий Васильевич (21.12.2015). "Strace 4.11 выпущен".
  45. ^ Левин Дмитрий Валерьевич (06.03.2015). "Strace 4.10 выпущен".
  46. ^ Левин Дмитрий Валерьевич (2014-08-15). "strace 4.9 выпущен".
  47. ^ Левин Дмитрий Васильевич (03.06.2013). "strace 4.8 выпущен".
  48. ^ Левин Дмитрий Валерьевич (2012-05-02). "strace 4.7 выпущен".
  49. ^ Левин Дмитрий Васильевич (15.03.2011). "strace 4.6 выпущен".
  50. ^ Рик Слэдки (1994-07-09). "v43i075: strace - трассировщик системных вызовов для sunos, linux, svr4, solaris2, Part01 / 10".
  51. ^ Его сокращение для отображения только успешных звонков, -z option, изначально был добавлен в strace 4.5, но так и не был задокументирован, так как работал некорректно.
  52. ^ Хорки, Иржи (2013). "Профилировщик ввода-вывода ioapps и повторитель трассировок ввода-вывода". Получено 2013-09-16.
  53. ^ Уотерленд, Амос (2007). "Воспроизведение системного вызова sreplay". Получено 2013-09-16.
  54. ^ Бертон, Ариэль (1998). «Характеристика рабочей нагрузки с использованием облегченной трассировки и повторного выполнения системных вызовов» (PDF). Получено 2013-09-16.
  55. ^ «XTrace - трассировка соединений протокола X». xtrace.alioth.debian.org. Получено 2014-08-12.
  56. ^ "dtrace (1) Страница руководства Mac OS X". Developer.apple.com. Получено 2014-07-23.
  57. ^ «IntellectualHeaven - Strace для Windows». Intelligentheaven.com. Получено 29 января 2015.

внешняя ссылка