2014-12-22 3 views
6

Цель состоит в том, чтобы проанализировать аргументы, переданные конкретным системным вызовам (например, exec, open и т. Д.) Любым процессом.Позволяет ли ftrace брать аргументы системного вызова в ядро ​​Linux или только имена функций?

Из official documentation описана невозможность записи аргументов функции (в основном, в функции «трассировка функции», поскольку мне не нужен график).

Я хотел удостовериться, что я не пропускаю что-то и трачу время на использование чего-то более экзотического, если я действительно смогу сделать это в рамках ftrace.

+0

Если вы ищете системные вызовы из пользовательского пространства, а также их аргументы, тогда вам нужна простая утилита userstrice. – Peter

ответ

4

У меня ограниченный опыт работы с ftrace, хотя я использовал его для отслеживания стека функций и латентности. (Люди с большим опытом могут предложить). Его почти такой же опыт, используя trace-cmd и kernelshark.

Однако, если вы хотите отследить системные вызовы, параметры функций, API-интерфейсы ядра и возвращаемые значения и т. Д. В пространстве ядра, лучшим выбором было бы пойти с systemtap. Он имеет обширный список Samples & Doc, который хорош для отслеживания вызовов функций, переданных значений аргументов и т. Д. Возможно, вы захотите посмотреть на некоторые образцы и сделать их в соответствии с вашими требованиями. См general/para-callgraph-verbose.stp и process/sleeptime.stp

"

общая/пара-граф вызовов-verbose.stp - граф вызовов Трассировка с VERBOSE Аргументы Ключевые слова: TRACE граф вызовов

Печать синхронизированную каждого потока микросекунды приуроченная граф вызовов, в комплекте с довольно напечатанными параметрами функции и возвращаемыми значениями.Первый параметр называет точки зонда функции для отслеживания. Необязательный второй параметр называет точки зонда для функций триггера, которые действуют, чтобы включить трассировку только для тех функций, которые возникают, когда текущий поток вложенные в триггер гер.

stap para-callgraph-verbose.stp 'kernel.function("*@fs/proc*.c")' \ 
'kernel.function("vfs_read")' -c "cat /proc/sys/vm/* || true" 

процесс strace.stp/ - система трассировки вызовов ключевые слова: _BEST ПРОЦЕСС SYSCALL

Сценарий свободно эмулирует Трассирование, применительно к отдельным процессам или иерархии (с помощью -c/-x), или всей системы (без -c/-x). Несколько параметров конфигурации вывода могут быть установлены с -G.

stap strace.stp -c "sleep 1" 

"

Примечания Вам необходимо установить правильную версию debug kernel и kernel-devel RPMS/DEB для stap работать правильно. Для этого просто использовать stap-prep и установить зависимость, показанную в зависимости от вкуса вас находятся на

+1

Отслеживание системных вызовов упрощается с помощью: https://sourceware.org/systemtap/examples/#process/strace.stp - не требуется символов отладки ядра, например. – fche

+0

@fche спасибо за обновление. strace.stp не был доступен с моей версией примеров systemtap. Я обновлю поток. – askb

+0

(часто образцы, включенные в более поздние версии stap, отлично работают на ранних версиях.) – fche

0

подавай «Strace» выстрел Он контролирует взаимодействие betn UserSpace и ядро ​​

выходной образец можно найти здесь:... http://www.thegeekstuff.com/2011/11/strace-examples/

В качестве альтернативы, поскольку вы говорите конкретные системные вызовы, я предполагаю, что вас интересует только пара из них.

Если вам нужно использовать только FTRACE, вы можете добавить собственное событие трассировки в соответствующие файлы заголовков в include/trace/events /.h, используя макрос TRACE_EVENT и вызов этой новой функции трассировки во время обработчика вызова sytem внутри ядра.

Конечно, для этого требуется некоторая модификация кода, но вам должно быть достаточно легко, чтобы вы быстро пошли.

+1

Downvoted, потому что strace смотрит на один конкретный процесс, в то время как я ищу инструмент, который смотрит на все процессы в системе. – MaxVT

 Смежные вопросы

  • Нет связанных вопросов^_^