-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
Вы читаете Linux: Полное руководство