目标是检查任何进程传递给特定系统调用的参数(例如exec,open等)。
从official documentation开始,没有描述记录函数参数的能力(主要看"函数"跟踪器,因为我不需要图形)。
如果我能在ftrace的框架内实际做到这一点,我想确保我不会忽视某些东西并浪费时间使用更具异国情调的东西。
答案 0 :(得分:4)
我对ftrace
的经验有限,尽管我已将其用于功能堆栈跟踪和延迟问题。 (具有更多经验的人可能会建议)使用trace-cmd
和kernelshark
的体验几乎相同。
但是,如果要在内核空间中跟踪系统调用,函数参数,内核API和返回值等,更好的选择是使用systemtap
。它有一个广泛的Samples & Doc列表,它适用于函数调用跟踪,参数值传递等。您可能需要查看一些示例并根据您的要求进行调整。请参阅general/para-callgraph-verbose.stp
和process/sleeptime.stp
"
general / para-callgraph-verbose.stp - 带有详细参数的Callgraph跟踪 关键字: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 kernel
安装正确版本的kernel-devel
和stap
rpms / deb才能正常工作。为此,只需使用stap-prep
并根据您所使用的风格安装显示的依赖项。
答案 1 :(得分:0)
给“STRACE”一个机会。它监视用户空间和内核之间的交互。
可在此处找到示例输出: http://www.thegeekstuff.com/2011/11/strace-examples/
或者,由于您说的是特定的系统调用,我假设您只对其中的几个感兴趣。
如果必须单独使用FTRACE,可以使用TRACE_EVENT宏在include / trace / events / .h中的相关头文件中添加自己的trace事件,并在内核中的sytem调用处理程序中调用此新的跟踪函数
当然,这需要一些代码修改,但应该很容易让你快速前进。