6

目标是检查任何进程传递给特定系统调用(例如 exec、open 等)的参数。

官方文档中,没有描述记录函数参数的能力(主要看“函数”跟踪器,因为我不需要图表)。

如果我真的可以在 ftrace 的框架内做到这一点,我想确保我不会忽略某些东西并浪费时间使用更奇特的东西。

4

2 回答 2

5

ftrace尽管我已将它用于函数堆栈跟踪和延迟问题,但我的经验有限。trace-cmd(有更多经验的人可能会建议)使用and的经验几乎相同kernelshark

但是,如果您想在内核空间内跟踪系统调用、函数参数、内核 API 和返回值等,更好的选择是使用systemtap. 它有一个广泛的示例和文档列表,这对于函数调用跟踪、传递的参数值等很有用。您可能想查看一些示例并根据您的要求定制它们。见general/para-callgraph-verbose.stpprocess/sleeptime.stp

"

general/para-callgraph-verbose.stp - 使用详细参数关键字进行调用图跟踪:TRACE CALLGRAPH

打印一个定时的每线程微秒定时调用图,并带有漂亮打印的函数参数和返回值。第一个参数命名要跟踪的函数探针点。可选的第二个参数命名触发器函数的探测点,它的作用是仅对当前线程嵌套在触发器中时发生的那些函数启用跟踪。

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

process/strace.stp - 跟踪系统调用关键字:_BEST PROCESS SYSCALL

当应用于单个进程或层次结构(通过 -c/-x)或整个系统(没有 -c/-x)时,该脚本松散地模拟 strace。可以使用 -G 设置一些输出配置参数。

stap strace.stp -c "sleep 1"

"

请注意,您需要安装正确版本的debug kernelrpms kernel-devel/debstap才能正常工作。为此,只需stap-prep根据您使用的风格使用并安装显示的依赖项。

于 2014-12-23T09:59:35.510 回答
0

试一试“STRACE”。它监视用户空间和内核之间的交互。

可以在此处找到示例输出: http ://www.thegeekstuff.com/2011/11/strace-examples/

或者,由于您说的是特定的系统调用,我假设您只对其中的几个感兴趣。

如果您必须单独使用 FTRACE,您可以在 include/trace/events/.h 中的相关头文件中添加自己的跟踪事件,使用 TRACE_EVENT 宏并在内核内部的系统调用处理程序期间调用这个新的跟踪函数。

当然,这需要一些代码修改,但应该很容易让你快速上手。

于 2014-12-23T17:57:46.677 回答