-e trace=file Будут отслеживаться только вызовы для работы с файлами (open, stat, chmod, unlink и т.д.)
-e trace=process Отслеживаются вызовы для работы с процессами (fork, exec, wait и др.)
-e trace=network Отслеживаются сетевые вызовы
-e trace=signal Отслеживаются вызовы для работы с сигналами
-e trace=ipc Отслеживаются IPC-вызовы
-e abbrev=набор Сокращает вывод каждого члена структуры. Например, abbrev=all или abbrev=none
-e verbose=набор Различать структуры различных системных вызовов, по умолчанию verbose=all
-e raw=set Выводит не декодированные значения аргументов системных вызовов. Данный аргумент полезен, если вы не доверяете декодированию или хотите знать точное числовое представление аргумента
-e signal=набор Определяет набор трассируемых сигналов. По умолчанию signal=all. Вы можете использовать восклицательный знак для отрицания, например, signal=!SIGIO означает, что сигнал SIGIO не будет трассирован
-e read=набор Выполнять полный шестнадцатиричный и ASCII-дамп всех прочитанных вызовом read() данных. Например, чтобы видеть все данные, поступающие через дескрипторы 2 и 7, введите read=2,7
-e write=набор То же, что и -e read, но только для записи
-o имя_файла Перенаправить вывод программы в указанный файл. Данный файл будет полезен для дальнейшего анализа трассировки
-p pid Присоединиться к процессу с PID=pid и начать трассировку
-s размер Установить максимальный размер строки (по умолчанию 32). Имена файлов не рассматриваются как строки, поэтому всегда будут напечатаны полностью
-S критерий Сортирует вывод гистограммы, которая выводится опцией -с, по заданному критерию: time (время), calls (вызовы), name (имя) и nothing (без сортировки)
-u имя_пользователя Запустить программу от имени указанного пользователя. Эта опция будет полезной, если вы, зарегистрировавшись как root, будете проверять корректность работы программы, если бы она была запущена под другим пользователем

Вы даже не можете себе представить, какие системные вызовы использует такая маленькая программка:

Листинг 22.2. Файл prog.с

#include <stdio.h>

int main() {

 printf('Hello ');

 return 0;

}

Откомпилируйте эту программу (gcc -o prog prog.c) и запустите strace:

$ strace prog

Вы увидите следующий вывод:

execve('./a.out', ['./а.out'], [/* 21 vars */]) = 0

uname((sys='Linux', node='localhost.localdomain', ...}) = 0

brk(0) = 0x80495b4

open('/etc/ld.so.preload', O_RDONLY) = -1 ENOENT (No such file or directory)

open('/etc/ld.so.cache', O_RDONLY) = 7

fstat64(7, {st_mode=S_IFREG|0644, st_size=31578, ...}) = 0

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату