GoGPT Best VPN GoSearch

Значок OnWorks

strace - Интернет в облаке

Запустите strace в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда strace, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


strace - отслеживает системные вызовы и сигналы

СИНТАКСИС


Трассирование [-CdffhikqrtttTvVxxy] [-In] [-bExecve] [-eвыраж] ... [-aобзор] [-oфайл] [-sразмер]
[-Pпуть] ... -pПИД-регулятор... / [-D] [-Eвар[=волна]] ... [-uusername] команду [арг]

Трассирование -c[df] [-In] [-bExecve] [-eвыраж] ... [-Oнакладные расходы] [-SСортировать по] -pПИД-регулятор... / [-D]
[-Eвар[=волна]] ... [-uusername] команду [арг]

ОПИСАНИЕ


В простейшем случае Трассирование выполняет указанные команду пока он не выйдет. Он перехватывает и
записывает системные вызовы, которые вызываются процессом, и полученные сигналы
по процессу. Имя каждого системного вызова, его аргументы и возвращаемое значение:
печатается при стандартной ошибке или в файл, указанный с -o опцию.

Трассирование это полезный инструмент диагностики, обучения и отладки. Системные администраторы,
диагносты и специалисты по устранению неполадок сочтут его неоценимым при решении проблем с
программы, исходный код которых недоступен, поскольку они не должны быть
перекомпилирован для их отслеживания. Студенты, хакеры и чрезмерно любопытные найдут
что можно многое узнать о системе и ее системных вызовах, отслеживая даже
обычные программы. И программисты обнаружат, что, поскольку системные вызовы и сигналы
события, которые происходят в интерфейсе пользователя / ядра, тщательное изучение этой границы является
очень полезен для изоляции ошибок, проверки работоспособности и попыток захвата условий гонки.

Каждая строка трассировки содержит имя системного вызова, за которым следуют его аргументы в
круглые скобки и его возвращаемое значение. Пример использования команды "cat / dev / null"
это:

open ("/ dev / null", O_RDONLY) = 3

К ошибкам (обычно возвращаемое значение -1) добавляются символ errno и строка ошибки.

open ("/ foo / bar", O_RDONLY) = -1 ENOENT (Нет такого файла или каталога)

Сигналы печатаются как символ сигнала и декодированная структура siginfo. Отрывок из
выполнение и прерывание команды "sleep 666":

sigsuspend ([]
--- SIGINT {si_signo = SIGINT, si_code = SI_USER, si_pid = ...} ---
+++ убит SIGINT +++

Если выполняется системный вызов, а в это время вызывается другой из
другой поток / процесс тогда Трассирование постарается сохранить порядок этих событий и
отметьте текущий звонок как незаконченный. Когда вызов вернется, он будет отмечен как
возобновлено.

[pid 28772] выберите (4, [3], NULL, NULL, NULL
[pid 28779] clock_gettime (CLOCK_REALTIME, {1130322148, 939977000}) = 0
[pid 28772] <... выберите возобновлено>) = 1 (в [3])

Прерывание (перезапускаемого) системного вызова доставкой сигнала обрабатывается иначе.
поскольку ядро ​​завершает системный вызов, а также организует его немедленное повторное выполнение после
обработчик сигнала завершает работу.

читать (0, 0x7ffff72cf5cf, 1) =? ЭРЕСТАРТСИС (будет перезапущен)
--- СИГАЛРМ ... ---
rt_sigreturn(0хе) = 0
читать (0, "", 1) = 0

Аргументы печатаются в символической форме со страстью. В этом примере показана оболочка
выполнение перенаправления вывода ">> xyzzy":

open ("xyzzy", O_WRONLY | O_APPEND | O_CREAT, 0666) = 3

Здесь третий аргумент open декодируется путем разбиения аргумента флага на его
три составляющих побитового ИЛИ и традиционная печать значения режима в восьмеричном формате. Где
традиционное или собственное использование отличается от ANSI или POSIX, последние формы предпочтительнее.
В некоторых случаях, Трассирование вывод оказался более читабельным, чем исходный.

Указатели структуры разыменовываются, и элементы отображаются соответствующим образом. В целом
аргументы case отформатированы максимально в стиле C. Например,
суть команды "ls -l / dev / null" записана как:

lstat ("/ dev / null", {st_mode = S_IFCHR | 0666, st_rdev = makedev (1, 3), ...}) = 0

Обратите внимание, как разыменовывается аргумент 'struct stat' и как отображается каждый член
символически. В частности, обратите внимание, как член st_mode аккуратно декодируется в
побитовое ИЛИ символьных и числовых значений. Также обратите внимание, что в этом примере первый
аргумент lstat - это вход для системного вызова, а второй аргумент - это выход.
Поскольку выходные аргументы не изменяются при сбое системного вызова, аргументы не всегда могут
разыменовать. Например, повторная попытка примера "ls -l" с несуществующим файлом
производит следующую строку:

lstat ("/ foo / bar", 0xb004) = -1 ENOENT (Нет такого файла или каталога)

В этом случае свет на крыльце горит, но никого нет дома.

Указатели на символы разыменовываются и печатаются как строки C. Непечатаемые символы в
строки обычно представлены обычными escape-кодами C. Только первый размер (32
по умолчанию) печатаются байты строк; к более длинным строкам добавляется многоточие
после заключительной цитаты. Вот строка из "ls -l", где getpwuid библиотеки
программа читает файл паролей:

read (3, "root :: 0: 0: Системный администратор: /" ..., 1024) = 422

В то время как структуры аннотируются с помощью фигурных скобок, печатаются простые указатели и массивы.
используя квадратные скобки с элементами, разделяющими запятую. Вот пример из
команда "id" в системе с дополнительными идентификаторами групп:

getgroups (32, [100, 0]) = 2

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

sigprocmask (SIG_BLOCK, [CHLD TTOU], []) = 0

Здесь второй аргумент - это набор битов из двух сигналов, SIGCHLD и SIGTTOU. В некоторых случаях
битовый набор настолько полон, что распечатать неустановленные элементы более ценно. В этом
В этом случае перед набором битов ставится тильда, например:

sigprocmask (SIG_UNBLOCK, ~ [], NULL) = 0

Здесь второй аргумент представляет собой полный набор всех сигналов.

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ


-c Подсчитайте время, количество вызовов и ошибок для каждого системного вызова и сообщайте сводку по
выход из программы. В Linux это пытается показать системное время (затраченное время процессора
работает в ядре) независимо от времени настенных часов. Если -c используется с -f
or -F (ниже) сохраняются только совокупные итоги для всех отслеживаемых процессов.

-C Подобно -c но также печатать обычный вывод во время работы процессов.

-D Запустите процесс трассировки как обособленный внук, а не как родитель трассируемого.
Это уменьшает видимый эффект Трассирование сохраняя следы прямого ребенка
вызывающего процесса.

-d Показать некоторые отладочные данные Трассирование сам по стандартной ошибке.

-f Отслеживать дочерние процессы по мере их создания отслеживаемыми в настоящее время процессами как
результат вилка(2) вилка(2) и клонировать(2) системные вызовы. Обратите внимание, что -p PID
-f присоединит все потоки процесса PID, если он многопоточный, а не только
поток с thread_id = PID.

-FF. Если же линия индикатора -o имя файла активна, трассировка каждого процесса записывается в
имя файла.pid где pid - это числовой идентификатор каждого процесса. Это
несовместимы с -c, поскольку подсчет по процессам не ведется.

-F Эта опция устарела и имеет те же функции, что и -f.

-h Распечатайте сводку справки.

-i Распечатайте указатель инструкции во время системного вызова.

-k Распечатайте трассировку стека выполнения отслеживаемых процессов после каждого системного вызова
(экспериментальный). Эта опция доступна, только если Трассирование построен с
либувинд.

-q Подавлять сообщения о присоединении, отсоединении и т. Д. Это происходит автоматически
когда вывод перенаправляется в файл и команда запускается напрямую вместо
прикрепление.

-qq Если задано дважды, подавить сообщения о статусе выхода из процесса.

-r Печатайте относительную временную метку при входе в каждый системный вызов. Это записывает
разница во времени между началом последовательных системных вызовов.

-t Приставьте к каждой строке графика время дня.

-тт Если указано дважды, напечатанное время будет включать микросекунды.

-ттт Если задано трижды, напечатанное время будет включать микросекунды и
ведущая часть будет напечатана как количество секунд с начала эпохи.

-T Показать время, затраченное на системные вызовы. Это записывает разницу во времени между
начало и конец каждого системного вызова.

-w Обобщите разницу во времени между началом и концом каждой системы.
вызов. По умолчанию суммируется системное время.

-v Вывести полные версии вызовов среды, статистики, терминов и т. Д.
Эти структуры очень распространены в вызовах, поэтому поведение по умолчанию отображается
разумное подмножество элементов структуры. Используйте эту опцию, чтобы получить все
кровавые подробности.

-V Выведите номер версии Трассирование.

-x Вывести все строки, отличные от ASCII, в шестнадцатеричном формате.

-хх Вывести все строки в шестнадцатеричном формате.

-y Пути печати, связанные с аргументами файлового дескриптора.

-уу Выведите ip: пары портов, связанные с дескрипторами файлов сокетов.

-a обзор Выровняйте возвращаемые значения в определенном столбце (столбец по умолчанию 40).

-b Системный вызов Если указанный системный вызов достигнут, отключиться от отслеживаемого процесса. В настоящее время только
Execve syscall поддерживается. Эта опция полезна, если вы хотите отследить
многопоточный процесс и поэтому требует -f, но не хочу отслеживать его
(потенциально очень сложные) дети.

-e выраж Уточняющее выражение, которое изменяет, какие события отслеживать или как отслеживать.
их. Формат выражения:

[спецификатор=][!]value1[,value2] ...

в котором спецификатор один из прослеживать, сокращение, подробный, сырье, сигнал, читать или записывать
и ценностное является символом или числом, зависящим от квалификатора. Квалификатор по умолчанию -
прослеживать. Использование восклицательного знака отменяет набор значений. Например,
-e открытый означает буквально -e прослеживать=открытый что, в свою очередь, означает трассировку только открытый
системный вызов. Напротив, -e прослеживать=!открытый означает отслеживать каждый системный вызов
кроме открытый. Кроме того, особые ценности ВСЕ и нет иметь очевидное
значения.

Обратите внимание, что некоторые оболочки используют восклицательный знак для раскрытия истории даже
внутри цитируемых аргументов. В таком случае восклицательный знак следует убрать с помощью
обратная косая черта.

-e прослеживать=набор
Отслеживать только указанный набор системных вызовов. В -c опция полезна для
определение того, какие системные вызовы можно было бы отслеживать. Например,
прослеживать=открыть, закрыть, прочитать, написать означает отслеживать только эти четыре системных вызова. Быть
осторожно, делая выводы о границе пользователь / ядро, если только подмножество
системных вызовов отслеживаются. По умолчанию прослеживать=ВСЕ.

-e прослеживать=файл
Отслеживайте все системные вызовы, которые принимают имя файла в качестве аргумента. Ты можешь думать
этого как аббревиатуры для -e прослеживать=открытый,состояние,CHMOD,разъединить,... который
полезно для просмотра файлов, на которые ссылается процесс. Кроме того, используя
сокращение гарантирует, что вы случайно не забудете добавить
позвони как lstat в списке. Бетчья бы забыла об этом.

-e прослеживать=процесс
Отслеживайте все системные вызовы, связанные с управлением процессами. Это полезно для
наблюдение за этапами fork, wait и exec.

-e прослеживать=сеть
Отслеживайте все системные вызовы, связанные с сетью.

-e прослеживать=сигнал
Отслеживайте все системные вызовы, связанные с сигналами.

-e прослеживать=IPC
Отслеживайте все системные вызовы, связанные с IPC.

-e прослеживать=по убыванию
Отслеживайте все системные вызовы, связанные с файловыми дескрипторами.

-e прослеживать=Память
Отслеживайте все системные вызовы, связанные с отображением памяти.

-e сокращение=набор
Сократите вывод при печати каждого члена больших структур. В
по умолчанию сокращение=ВСЕ, -v вариант имеет эффект сокращение=нет.

-e подробный=набор
Структуры разыменования для указанного набора системных вызовов. По умолчанию
подробный=ВСЕ.

-e сырье=набор Вывести необработанные, недекодированные аргументы для указанного набора системных вызовов. Этот
опция приводит к тому, что все аргументы печатаются в шестнадцатеричном формате.
Это в основном полезно, если вы не доверяете декодированию или вам нужно знать
фактическое числовое значение аргумента.

-e сигнал=набор
Отслеживайте только указанное подмножество сигналов. По умолчанию сигнал=ВСЕ. Для
пример, сигнал =! СИДЖИО (или сигнал=!io) приводит к тому, что сигналы SIGIO не
прослеживается.

-e читать=набор Выполните полный шестнадцатеричный и ASCII дамп всех данных, считанных из файла.
дескрипторы, перечисленные в указанном наборе. Например, чтобы увидеть весь ввод
активность файловых дескрипторов 3 и 5 используют -e читать=3,5. Обратите внимание, что это
независимо от обычного отслеживания читать(2) системный вызов, который
контролируется опцией -e прослеживать=читать.

-e записывать=набор
Выполните полный шестнадцатеричный и ASCII дамп всех данных, записанных в файл.
дескрипторы, перечисленные в указанном наборе. Например, чтобы увидеть весь вывод
активность файловых дескрипторов 3 и 5 используют -e записывать=3,5. Обратите внимание, что это
независимо от обычного отслеживания записывать(2) системный вызов, который
контролируется опцией -e прослеживать=записывать.

-I прерываемый
Когда strace может быть прерван сигналами (например, нажатием ^ C). 1: нет
сигналы заблокированы; 2: фатальные сигналы блокируются при декодировании системного вызова
(дефолт); 3: фатальные сигналы всегда блокируются (по умолчанию, если '-o FILE PROG'); 4:
фатальные сигналы и SIGTSTP (^ Z) всегда блокируются (полезно, чтобы strace -o
ФАЙЛ ПРОГ не останавливается на ^ Z).

-o имя файла Записать вывод трассировки в файл имя файла а не в stderr. Использовать
имя файла.pid if -FF. используется. Если аргумент начинается с "|" или с помощью '!' тогда
остальная часть аргумента рассматривается как команда, и весь вывод передается по конвейеру
Это. Это удобно для передачи вывода отладки в программу без
влияющие на перенаправления исполняемых программ.

-O накладные расходы Установите накладные расходы на отслеживание системных вызовов на накладные расходы микросекунды. Это
полезно для переопределения эвристики по умолчанию, чтобы угадать, сколько времени
тратится на простое измерение времени системных вызовов с использованием -c вариант.
точность эвристики можно оценить, рассчитав время выполнения данной программы без
отслеживание (с использованием время(1)) и сравнивая накопленное время системного вызова с
всего произведено с использованием -c.

-p ПИД-регулятор Прикрепите к процессу с идентификатором процесса ПИД-регулятор и начать отслеживание. След
может быть прерван в любой момент сигналом прерывания клавиатуры (CTRL-C). Трассирование
ответит, отделившись от отслеживаемого процесса (ов), оставив его (их)
чтобы продолжить бег. Несколько -p параметры можно использовать для прикрепления ко многим
процессы. -p "` pidof PROG` "синтаксис поддерживается.

-P путь Отслеживать доступ только к системным вызовам дорожка. Многочисленные -P варианты могут быть использованы для
укажите несколько путей.

-s размер Укажите максимальный размер строки для печати (по умолчанию 32). Обратите внимание, что
имена файлов не считаются строками и всегда печатаются полностью.

-S Сортировать по Отсортируйте вывод гистограммы, напечатанной -c вариант по указанному
критерий. Правовые ценности время, призывы, имя и ничего (по умолчанию время).

-u username Запустите команду с идентификатором пользователя, идентификатором группы и дополнительными группами username.
Эта опция полезна только при запуске от имени пользователя root и включает правильный
выполнение двоичных файлов setuid и / или setgid. Если эта опция не используется setuid
и программы setgid выполняются без действующих привилегий.

-E вар=волна Запустить команду с помощью вар=волна в своем списке переменных среды.

-E вар Удалить вар из унаследованного списка переменных среды перед его передачей
по команде.

ДИАГНОСТИКИ


После появления команду выходы, Трассирование выходит с тем же статусом выхода. Если команду прекращается
сигнал Трассирование завершается тем же сигналом, так что Трассирование может использоваться как
процесс-оболочка, прозрачный для вызывающего родительского процесса. Обратите внимание, что родитель-ребенок
взаимосвязь (уведомления об остановке сигнала, значение getppid () и т. д.) между отслеживаемым процессом и
его родительский элемент не сохраняется, если -D используется.

Когда используешь -p, статус выхода Трассирование равен нулю, если не возникла непредвиденная ошибка в
делаем трассировку.

СЕТЮИД МОНТАЖ


If Трассирование установлен setuid для root, тогда вызывающий пользователь сможет подключиться и
отслеживать процессы, принадлежащие любому пользователю. Кроме того, программы setuid и setgid будут
выполняется и отслеживается с правильными действующими привилегиями. Поскольку только пользователи доверяют
полные привилегии root должны быть разрешены для этих вещей, имеет смысл только установить
Трассирование как setuid для root, когда пользователи, которые могут его выполнить, ограничены этими пользователями
у кого есть это доверие. Например, есть смысл установить специальную версию Трассирование
с режимом 'rwsr-xr--', пользователь корень и группы прослеживать, где члены прослеживать группа
доверенные пользователи. Если вы все же используете эту функцию, не забудьте установить не setuid
версии Трассирование для обычных лузеров.

Используйте strace онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

Команды Linux

Ad




×
Реклама
❤️Совершайте покупки, бронируйте или заказывайте здесь — никаких затрат, что помогает поддерживать бесплатность услуг.