Програми Linux запитують
ядро
робити деякі речі для них. Точний
штрих
Команда показує ці системні дзвінки. Ви можете використовувати їх, щоб зрозуміти, як програми працюють і чому, іноді, вони цього не роблять.
Джерело та системні дзвінки
Як розумні, як вони можуть бути, комп'ютерні програми не можуть робити все для себе. Вони повинні робити запити, щоб мати певні функції для них. Ці запити йдуть до ядра Linux. Як правило, існує бібліотека або інший інтерфейс програмного забезпечення, який викликає програму, а бібліотека потім робить відповідний запит, який називається системним викликом до ядра.
Можливість перегляду системи закликає, що програма зробила, і які відповіді можуть допомогти вам зрозуміти внутрішню роботу програм, які вас цікавлять, або що ви написали. Це
що
штрих
робити
. Це може допомогти усунути проблеми та шукати вузькі місця.
Це не те ж саме, як
налагодження програми
з таким інструментом
грн
. Програма налагодження дозволяє досліджувати внутрішню роботу програми, як це працює. Він дозволяє вийти через логіку вашої програми та перевіряти пам'ять та змінні значення. Порівняно, що
штрих
Чи є захоплення інформацією про систему, оскільки програма працює. Коли простежується програма, закінчується,
штрих
Перераховує інформацію про систему до вікна терміналу.
Системні дзвінки забезпечують всілякі функціональні можливості низькорівневого рівня, наприклад, читання та запису дій на файлах, процеси вбивства тощо. Є список сотень системних дзвінків на Syscalls людина сторінка .
Пов'язані: Налагодження з GDB: Початок роботи
Встановлення нитки
Якщо
штрих
На вашому комп'ютері ще не встановлено, ви можете легко встановити його.
На Ubuntu використовуйте цю команду:
sudo apt install strid
На Fedora введіть цю команду:
sudo dnf встановлює нитку
На Manjaro команда:
Sudo Pacman-STRACE
Перші кроки зі строком
Ми будемо використовувати невелику програму для демонстрації
штрих
. Це не робить багато: він відкриває файл і записує до нього лінію тексту, і він не має жодної помилки. Це просто швидкий хак, щоб у нас є щось для використання
штрих
.
#include & lt; stdio.h & gt;
int main (int argc, char argv []) {
// файлова ручка
Файл * filegeek;
// Відкрити файл під назвою "stray_demo.txt", або створити його
FileGeek = Fopen ("stray_demo.txt", "w");
// написати текст до файлу
fprintf (filegeek, "Напишіть це до файлу");
// закрити файл
fclose (filegeek);
// Вихід з програми
повернення (0);
} // кінець головної
Ми врятували це у файл під назвою "file-io.c" і склав його
гнучкий
в виконуваний виклик
стекс
, названий за "
вул
гонка
колишній
достатньо.
GCC -o stex file-io.c
Ми зателефонуємо
штрих
З командного рядка і передайте ім'я нашого нового виконуваного до нього, як процес, який ми хочемо простежити. Ми могли б так само легко простежити будь-який з команд Linux або будь-який інший бінарний виконуваний. Ми використовуємо нашу крихітну програму з двох причин.
Перша причина
штрих
verlose. Там може бути багато випуску. Це здорово, коли ви використовуєте
штрих
У гніві, але спочатку це може бути переважним. Є обмежені
штрих
випуск для нашої крихітної програми. Друга причина полягає в тому, що наша програма має обмежену функціональність, а вихідний код короткий і простий. Це полегшує визначення того, які розділи виходу відносяться до різних частин внутрішньої роботи програми.
Склад ./stex
Ми можемо чітко бачити
писати
Системний виклик Надсилання тексту "Напишіть це у файл" до нашого відкритого файлу та
Exit_Group
системний дзвінок. Це припиняє всі теми в заявці та надсилає зворотне значення назад до оболонки.
Фільтрування виходу
Навіть з нашою простим демонстраційною програмою, досить багато випуску. Ми можемо використовувати
-Е
(вираз) варіант. Ми перейдемо в ім'я системного виклику, що ми хочемо бачити.
Strace - писати ./stex
Ви можете повідомити про кілька системних дзвінків, додавши їх як список, розділений комами. Не включайте будь-який пробіл у списку системних дзвінків.
Страс - Закрити, пишіть ./stex
Відправка вихід до файлу
Перевага фільтрації виходу також є проблемою з фільтрацією виходу. Ви бачите, що ви попросили побачити, але ви не бачите нічого іншого. І деякі з них інші вихід можуть бути більш корисними для вас, ніж речі, які ви попросили побачити.
Іноді зручніше захопити все і шукати і прокручувати весь набір результатів. Таким чином, ви не випадково не виключаєте нічого важливого. Точний
-О
(вихідний) параметр дозволяє відправляти вихід з a
штрих
сеанс до текстового файлу.
Strace -o trace-vection.txt ./stex
Потім ви можете
використовувати
менш
командування
щоб прокрутити перелік та пошук системних дзвінків або що-небудь інше-за назвою.
Менше трас-висновок.txt
Тепер ви можете використовувати все
менш
Можливості пошуку для вивчення вибуху.
Пов'язані: Як використовувати меншу команду на Linux
Додавання міток
Ви можете додати кілька різних мітків до виходу. Точний
-r
(Відносний міністр) варіант додає часові терміни, які показують різницю часу між початком кожного послідовного дзвінка системи. Зверніть увагу, що ці значення часу включатимуть час, витрачений у попередній системній дзвінку та що-небудь ще, що програма робила до наступного системного дзвінка.
Strace -r ./stex
Часові мітки відображаються на початку кожного рядка виходу.
Щоб побачити кількість часу, витраченого в кожному системному дзвінку, використовуйте
-Т
(Syscall-times) варіант. Це показує тривалість часу, витраченого всередині кожного системного дзвінка.
Strace -t ./stex
Час тривоги відображаються в кінці кожної лінії системи виклику.
Щоб побачити час, коли кожен системний дзвінок був названий, використовуйте
-tt
(Абсолютні часові завдання). Це показує час "настінного годинника", з мікросекундним дозволом.
Strace -tt ./stex
Час відображаються на початку кожного рядка.
Відстеження бігового процесу
Якщо процес, який ви хочете відстежувати, вже працює, ви все ще можете прикріпити
штрих
до цього. Для цього потрібно знати ідентифікатор процесу. Ти можеш
використання
псувати
з
грунт
щоб знайти це. У нас працює Firefox. Щоб дізнатися ідентифікатор
пожежник
процес, ми можемо використовувати
псувати
і
через
грунт
.
PS -E | Grep Firefox
Ми бачимо, що ідентифікатор процесу 8483. ми будемо використовувати
-п
(Ідентифікатор процесу), щоб розповісти
штрих
який процес прикріплюється. Зауважте, що вам потрібно буде використовувати
судно
:
Sudo Strace -P 8483
Ви побачите це повідомлення
штрих
Додав себе до процесу, а потім телефонні сліди виклики будуть відображатися у вікні терміналу, як завжди.
Створення звіту
Точний
"" "" ")
(Тільки підсумки) варіанти причини
штрих
надрукувати звіт. Він генерує таблицю для отримання інформації про системні дзвінки, зроблені простеженою програмою.
Strime -c ./stex
Колони:
- % часу : Відсоток часу виконання, який був витрачений у кожному системному виклику.
- секунд : Загальний час, виражений у секундах та мікросекундах, витрачених у кожному системному дзвінку.
- usecs / call : Середній час у мікросекундах, витрачений у кожному системному виклику.
- дзвінки : Кількість разів, коли кожен системний дзвінок був виконаний.
- помилки : Кількість несправностей для кожного системного дзвінка.
- сидіти : Назва системного дзвінка.
Ці значення показують нулі для тривіальних програм, які виконуються та швидко закінчуються. Реальні цінності показані для програм, які роблять щось більш значуще, ніж наша демонстраційна заявка.
Глибокі уявлення, легко
Точний
штрих
Вихід може показати вам, які системні дзвінки здійснюються, які беруть багаторазово, і скільки часу виконання витрачається всередину коду ядра. Це велика інформація. Часто, коли ви намагаєтеся зрозуміти, що відбувається всередині вашого коду, легко забути, що ваша двійка взаємодіє майже безперервно з ядром для виконання багатьох його функцій.
З допомогою
штрих
, ви бачите повну картину.