Strace

Strace

Сообщение Oleg65 » 07 дек 2016, 11:42

До недавнего времени я особо не заморачивался проблемами, возникавшими при запуске той или иной службы или приложения. Но не возможность (или мои кривые руки :?) запустить в Убунту 16.04 NetWork Manager зацепила меня и, после не сильно упорных поисков, я пришел к strace. (Сразу поясню, у меня НМ не запускался из-за отсутствия прав, которые система при установке, конкретно на моей машине, устанавливала для root, но пока я это узнал с помощью этой утилиты - прошло время). Так вот, хочу поделиться сведениями об этой утилите.
Для чего она нужна: Для отслеживания системных вызовов и сигналов, что помогает найти ошибку и, если не исправить ее, то, хотя бы, грамотно слепить bug_report ;) Она может помочь в следующих ситуациях:
- если приложение отказывается работать из-за проблем с правами;
- если приложение не запускается из-за отсутствия какого-нибудь нужного файла;
- иногда с помощью strace быстрее можно обнаружить проблемы с сетевыми прогами;
- при проблемах с физическим или псевдоустройством (типа /dev/random или /dev/ audit) strace покажет последний незавершенный вызов;
- если надо отследить все файлы, к которым обращается приложение в процессе работы.
Итак, что мы увидим (для примера трассирую Наутилус):
Код: выделить все
$ strace nautilus
Получаем вот такой вывод (привожу только кусочек) и Наутилус запускается:
Код: выделить все
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/libunity-gtk3-parser.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 >\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=68752, ...}) = 0
mmap(NULL, 2164184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0550cca000
mprotect(0x7f0550cda000, 2093056, PROT_NONE) = 0
mmap(0x7f0550ed9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xf000) = 0x7f0550ed9000
close(3)                                = 0
mprotect(0x7f0550ed9000, 4096, PROT_READ) = 0
mprotect(0x7f05510df000, 4096, PROT_READ) = 0
munmap(0x7f055d99d000, 121092)          = 0
brk(0x1e28000)                          = 0x1e28000
open("/usr/share/locale/ru/LC_MESSAGES/atk10.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/ru/LC_MESSAGES/atk10.mo", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=11960, ...}) = 0
mmap(NULL, 11960, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f055da48000
close(3)                                = 0
......
Короче - "темный лес". Не поленился и перевел маны наиболее часто встречающихся вызовов. В топике выкладывать не буду, но, кому стало интересно, могут перевод скачать здесь. Получилась этакая маленькая инструкция для перевода этого "темного леса" для понимания. Если кому-то поможет обнаруживать и исправлять проблемы - буду очень рад! :D :D :D
Аватар пользователя
Oleg65
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 842
Стаж: 3 года 4 месяца 3 дня
Откуда: г.Коломна Моск.обл.
Благодарил (а): 70 раз.
Поблагодарили: 201 раз.

Strace

Спонсор

Спонсор
 

Вернуться в Разное

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2