Решаване на проблеми с приложението с проследяване
Проучване на приложения с ферма

Системните администратори често се интересуват от това как работят приложенията. На пръв поглед е ясно само едно: приложението сякаш се стартира и след това спира или замръзва без никакво обяснение. Нито системните регистрационни файлове, нито техническата документация могат да помогнат. Проследяването на приложението е следващото действие в такъв случай.
Проследяване на програмата показва обажданията, които програмата прави към външни библиотеки и ядрото. Тези разговори дават на приложението достъп до мрежата, файловата система и дисплея. Наблюдавайки обажданията и техните резултати, можете да разберете какво е причинило приложението да работи неправилно.
Класически проблем с разрешенията на файлове
Един клас проблеми, които постоянно измъчват системните администратори, са разрешенията за файлове. Приложението със сигурност ще отвори някои файлове, за да си свърши работата. Ако операцията по отваряне на файла е неуспешна, програмата трябва да информира администратора за това. Разработчиците обаче често забравят да проверят резултатите от функциите или да извършат проверка, но забравят за обработката на грешки. Например, ето информацията, която приложението показва, когато не успее да отвори файл:
След стартирането на фиктивния openapp получих безполезно и неправилно съобщение за грешка: Това никога не трябва да се случва! ... Време е да се използва ферма. Листинг 1 показва същото приложение, изпълнявано под командата truss, което показва извикванията на функции, извършени от програмата към външни библиотеки.
Листинг 1. Приложението openapp работи под truss
Всеки ред от изведена информация представлява извикване на функция, направено от приложението и неговия резултат, ако е възможно. (За да научите повече за това, което прави всяка извикана функция, обърнете се към специфичния за функцията човек, като например човек отворен.) Често е по-лесно да започнете в края (или така), за да намерите обаждане, което може да причини проблем в програмата. възможно най-близо до мястото, където възниква проблемът). Например знаете, че приложението показва Това никога не трябва да се случва! и това съобщение се появява някъде близо до края на изхода на фермата. Ако намерите такова съобщение, след като анализирате изхода на командата truss, най-вероятно можете да идентифицирате причината за проблема...
При превъртане на съобщението за грешка можете да видите отворената линия ("/ etc/configfile"., Която не само е свързана с този проблем, но също така връща грешка # 13 EACCES. Ако погледнете описанието на функцията open () (команда man open), очевидно целта на тази функция е да отвори файл - в случая/etc/configfile - и връщаната стойност EACCES означава, че има проблем с разрешенията за това. След като разгледаме свойствата на файла/etc/configfile, става ясно, че потребителят няма разрешение да чете този файл, тогава можете да chmod и приложението ще започне да работи правилно.
Изходът в Листинг 1 показва две други повиквания, open () и stat (), които връщат грешка. Много разговори, включително двете, които причиняват грешки, в началото на приложението се извършват от операционната система срещу това приложение. Само опитът може да помогне да се определи кога грешките са безвредни и кога не. В този случай има две грешки, последвани от три реда, които се опитват да намерят libc.so.1. Проблемите със споделените библиотеки ще бъдат обсъдени по-късно.
Приложението не стартира
Понякога приложението не може да се стартира правилно или увисва, вместо да се изключи правилно. Това поведение често е симптом на конфликти на ресурси (например два процеса се състезават за заключване на файл) или приложение чака отговор на заявката си. Почти всички ситуации попадат в последния вариант на проблема: дълго търсене на име или файл, който е трябвало да бъде намерен на определено място, но не е бил там. Така или иначе, наблюдението на приложението с ферма трябва да свърши работа.
Първият пример показа очевидна връзка между системно повикване (източникът на проблема) и файл; следващият пример ще бъде малко по-сложен. Листинг 2 показва неправилно функциониращо приложение за заключване, работещо с ферма. .