stringtranslate.com

след

strace — это диагностическая, отладочная и обучающая утилита пользовательского пространства для Linux . Она используется для мониторинга и вмешательства во взаимодействия между процессами и ядром Linux , включая системные вызовы , доставку сигналов и изменение состояния процесса. Работа strace возможна благодаря функции ядра, известной как ptrace .

Некоторые Unix-подобные системы предоставляют другие диагностические инструменты, похожие на strace, например truss .

История

Strace был первоначально написан для SunOS Полом Краненбургом в 1991 году, согласно его уведомлению об авторских правах, и опубликован в начале 1992 года в третьем томе comp.sources.sun. Первоначальный файл README содержал следующее: [5]

strace(1) — это трассировщик системных вызовов для систем Sun(tm), очень похожий на поставляемую Sun программу trace(1) . strace(1) — это полезная утилита для сортировки отладочных программ, для которых нет исходного кода, которая, к сожалению, включает в себя почти все поставляемое Sun системное программное обеспечение.

Позже Бранко Ланкестер перенес эту версию на Linux , выпустив свою версию в ноябре 1992 года, а второй релиз последовал в 1993 году. [6] [7] Ричард Слэдки объединил эти отдельные версии strace в 1993 году и перенес программу на SVR4 и Solaris в 1994 году, [8] что привело к появлению strace 3.0, анонсированной в comp.sources.misc в середине 1994 года. [9]

Начиная с 1996 года, strace поддерживал Wichert Akkerman. Во время его пребывания в должности разработка strace перешла на CVS ; были представлены порты на FreeBSD и многие архитектуры на Linux (включая ARM, IA-64, MIPS, PA-RISC, PowerPC, s390, SPARC). В 2002 году бремя поддержки strace было передано Roland McGrath. С тех пор 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, которая имела некоторый (очевидно, мертвый) [10] код для операционных систем, отличных от Linux, была 4.6, выпущенная в марте 2011 года. [11] В версии strace 4.7, выпущенной в мае 2012 года, [12] весь код, не относящийся к Linux, был удален; [13] начиная с strace 4.13, [14] проект следует графику выпуска ядра Linux, а начиная с версии 5.0, [15] он также следует схеме версионирования Linux.

В 2012 году strace также получила поддержку трассировки пути и декодирования пути дескриптора файла. [16] В августе 2014 года был выпущен strace 4.9, [17] [18] в котором была добавлена ​​поддержка печати трассировок стека. В декабре 2016 года [19] [20] была реализована функция внедрения ошибок системных вызовов .

История версий

Использование и особенности

Наиболее распространенное использование — запуск программы с помощью strace, которая выводит список системных вызовов, выполненных программой. Это полезно, если программа постоянно падает или ведет себя не так, как ожидалось; например, использование strace может показать, что программа пытается получить доступ к файлу, который не существует или не может быть прочитан.

Альтернативное применение — использовать -pфлаг для присоединения к запущенному процессу. Это полезно, если процесс перестал отвечать, и может показать, например, что процесс блокируется при попытке установить сетевое соединение.

Среди прочих возможностей strace позволяет:

strace поддерживает декодирование аргументов некоторых классов команд ioctl , таких как BTRFS_* , V4L2_* , DM_* , NSFS_* , MEM* , EVIO* , KVM_* и некоторых других; он также поддерживает декодирование различных протоколов netlink .

Так как strace детализирует только системные вызовы, он не может быть использован для обнаружения такого количества проблем, как отладчик кода, такой как GNU Debugger (gdb). Однако он проще в использовании, чем отладчик кода, и является очень полезным инструментом для системных администраторов. Он также используется исследователями для генерации трассировок системных вызовов для последующего воспроизведения системных вызовов . [66] [67] [68]

Примеры

Ниже приведен пример типичного вывода команды strace:

пользователь@сервер:~$ strace  ls ... open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3 fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 fcntl64(3, F_GETFD) = 0x1 (флаги FD_CLOEXEC) getdents64(3, /* 18 записей */, 4096) = 496 getdents64(3, /* 0 записей */, 4096) = 0 close(3) = 0 fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000 запись(1, "autofs\nbackups\ncache\nflexlm\ngames"..., 86autofsA

Приведенный выше фрагмент — лишь малая часть вывода strace при запуске команды ' ls '. Он показывает, что текущий рабочий каталог открывается, проверяется и извлекается его содержимое. Полученный список имен файлов записывается в стандартный вывод.

Похожие инструменты

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

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

Примечания

  1. ^ Однако декодирование сообщений об ошибках системы выполняется в соответствии с текущей локалью, начиная со strace 4.22. [3]
  2. ^ Тестовый набор распространяется по лицензии GPL v2.0+ .
  3. ^ Его сокращение для отображения только успешных вызовов, -zoption, изначально было добавлено в strace 4.5, но никогда не было документировано, поскольку работало неправильно.

Ссылки

  1. ^ "Выпуск 6.11". 15 сентября 2024 г. Получено 26 сентября 2024 г.
  2. ^ "Проект с открытым исходным кодом strace на Open Hub". Openhub.net . Получено 23.11.2021 .
  3. ^ Дмитрий В. Левин (01.04.2018). "[PATCH] Добавить поддержку i18n" (список рассылки) . Получено 02.09.2021 .
  4. ^ Дмитрий В. Левин (15.12.2018). "I: изменение лицензии strace на лицензию copyleft" (список рассылки) . Получено 02.09.2021 .
  5. Пол Краненбург (2 марта 1992 г.). "Strace - альтернативный трассировщик системных вызовов". Группа новостей : comp.sources.sun.
  6. Бранко Ланкестер (5 ноября 1992 г.). «первый выпуск strace для Linux».
  7. Бранко Ланкестер (18 июня 1993 г.). «второй выпуск strace для Linux».
  8. ^ "След". manned.org. 21 июня 1994 года.
  9. ^ "SUNET's Index of /pub/usenet/ftp.uu.net/comp.sources.misc/volume43/strace". Архивировано из оригинала 11 сентября 2007 г. Получено 14 января 2015 г.
  10. ^ Денис Власенко (7 февраля 2012 г.). «Как насчет удаления не-Linux кода?».
  11. Дмитрий В. Левин (16 марта 2011 г.). «strace 4.6 выпущен».
  12. Дмитрий В. Левин (2 мая 2012 г.). «strace 4.7 выпущен».
  13. Дмитрий В. Левин (20 апреля 2012 г.). «Заслуживающие внимания изменения в версии 4.7».
  14. Дмитрий В. Левин (4 октября 2016 г.). «strace 4.14 выпущен».
  15. Дмитрий В. Левин (19 марта 2019 г.). «strace 5.0 выпущен».
  16. Дмитрий В. Левин (1 мая 2012 г.). «Заслуживающие внимания изменения в версии 4.7». GitHub .
  17. Дмитрий В. Левин (15 августа 2014 г.). «strace 4.9 выпущен».
  18. ^ Дмитрий В. Левин (15 августа 2014 г.). «Заслуживающие внимания изменения в версии 4.9». GitHub .
  19. Дмитрий В. Левин (14 декабря 2016 г.). «выпущена версия strace 4.15».
  20. ^ Дмитрий В. Левин (14 декабря 2016 г.). «Заслуживающие внимания изменения в версии 4.15». GitHub .
  21. ^ Дмитрий В. Левин (26.02.2023). "strace 6.2 выпущен".
  22. ^ Дмитрий В. Левин (12.12.2022). "strace 6.1 выпущен".
  23. ^ Дмитрий В. Левин (29.10.2022). "strace 6.0 выпущен".
  24. ^ Дмитрий В. Левин (12.08.2022). "strace 5.19 выпущен".
  25. ^ Дмитрий В. Левин (18.06.2022). "strace 5.18 выпущен".
  26. ^ Дмитрий В. Левин (27.03.2022). "strace 5.17 выпущен".
  27. ^ Дмитрий В. Левин (10.01.2022). "strace 5.16 выпущен".
  28. ^ Дмитрий В. Левин (01.12.2021). "strace 5.15 выпущен".
  29. ^ Дмитрий В. Левин (2021-09-02). "strace 5.14 выпущен".
  30. ^ Дмитрий В. Левин (18.07.2021). "strace 5.13 выпущен".
  31. ^ Дмитрий В. Левин (2021-04-26). "strace 5.12 выпущен".
  32. ^ Дмитрий В. Левин (17.02.2021). "strace 5.11 выпущен".
  33. ^ Дмитрий В. Левин (14.12.2020). "strace 5.10 выпущен".
  34. ^ Дмитрий В. Левин (24.09.2020). "strace 5.9 выпущен".
  35. ^ Дмитрий В. Левин (06.08.2020). "strace 5.8 выпущен".
  36. ^ Дмитрий В. Левин (01.06.2020). "strace 5.7 выпущен".
  37. ^ Дмитрий В. Левин (07.04.2020). "strace 5.6 выпущен".
  38. ^ Дмитрий В. Левин (2020-02-06). "strace 5.5 выпущен".
  39. ^ Дмитрий В. Левин (28.11.2019). "strace 5.4 выпущен".
  40. ^ Дмитрий В. Левин (25.09.2019). "strace 5.3 выпущен".
  41. ^ Дмитрий В. Левин (12.07.2019). "strace 5.2 выпущен".
  42. ^ Дмитрий В. Левин (22.05.2019). "strace 5.1 выпущен".
  43. ^ Дмитрий В. Левин (19.03.2019). "strace 5.0 выпущен".
  44. ^ Дмитрий В. Левин (2018-12-26). "strace 4.26 выпущен".
  45. ^ Дмитрий В. Левин (30.10.2018). "strace 4.25 выпущен".
  46. ^ Дмитрий В. Левин (14.08.2018). "strace 4.24 выпущен".
  47. ^ Дмитрий В. Левин (14.06.2018). "strace 4.23 выпущен".
  48. ^ Дмитрий В. Левин (2018-04-05). "strace 4.22 выпущен".
  49. ^ Дмитрий В. Левин (13.02.2018). "strace 4.21 выпущен".
  50. ^ Дмитрий В. Левин (13.11.2017). "выпущен strace 4.20".
  51. ^ Дмитрий В. Левин (05.09.2017). "strace 4.19 выпущен".
  52. ^ Дмитрий В. Левин (05.07.2017). "strace 4.18 выпущен".
  53. ^ Дмитрий В. Левин (24.05.2017). "strace 4.17 выпущен".
  54. ^ Дмитрий В. Левин (14.02.2017). "strace 4.16 выпущен".
  55. ^ Дмитрий В. Левин (14.12.2016). "strace 4.15 выпущен".
  56. ^ Дмитрий В. Левин (2016-10-04). "strace 4.14 выпущен".
  57. Дмитрий В. Левин (2016-07-26). "strace 4.13 выпущен".
  58. Дмитрий В. Левин (31.05.2016). "strace 4.12 выпущен".
  59. ^ Дмитрий В. Левин (21.12.2015). "strace 4.11 выпущен".
  60. Дмитрий В. Левин (06.03.2015). "strace 4.10 выпущен".
  61. ^ Дмитрий В. Левин (15.08.2014). "strace 4.9 выпущен".
  62. Дмитрий В. Левин (03.06.2013). "strace 4.8 выпущен".
  63. Дмитрий В. Левин (2012-05-02). "strace 4.7 выпущен".
  64. Дмитрий В. Левин (15.03.2011). "strace 4.6 выпущен".
  65. Рик Слэдки (09.07.1994). "v43i075: strace - трассировщик системных вызовов для sunos, linux, svr4, solaris2, часть 01/10".
  66. ^ Хорки, Джири (2013). "Профилировщик ввода-вывода ioapps и реплейсер трассировок ввода-вывода" . Получено 16 сентября 2013 г.
  67. ^ Waterland, Amos (2007). "Системный вызов sreplay replayer" . Получено 2013-09-16 .
  68. ^ Бертон, Ариэль (1998). "Характеристика рабочей нагрузки с использованием облегченной трассировки системных вызовов и повторного выполнения" (PDF) . Получено 16 сентября 2013 г.
  69. ^ "XTrace - трассировка соединений протокола X". xtrace.alioth.debian.org . Архивировано из оригинала 2014-08-05 . Получено 2014-08-12 .
  70. ^ "dtrace(1) Страница руководства Mac OS X". Developer.apple.com . Получено 2014-07-23 .
  71. ^ "IntellectualHeaven - Strace For Windows". intellectualheaven.com . Архивировано из оригинала 5 марта 2016 года . Получено 29 января 2015 года .

Внешние ссылки