目標是檢查通過任何進程傳遞給特定系統調用(例如,exec,open等)的參數。ftrace是否允許捕獲Linux內核的系統調用參數,或者只有函數名?
從official documentation,沒有記錄函數參數的能力(主要看「函數」跟蹤器,因爲我不需要圖)。
我想確保我沒有忽視某些東西,並且浪費時間使用更奇特的東西,如果我可以在ftrace框架內實際執行此操作。
目標是檢查通過任何進程傳遞給特定系統調用(例如,exec,open等)的參數。ftrace是否允許捕獲Linux內核的系統調用參數,或者只有函數名?
從official documentation,沒有記錄函數參數的能力(主要看「函數」跟蹤器,因爲我不需要圖)。
我想確保我沒有忽視某些東西,並且浪費時間使用更奇特的東西,如果我可以在ftrace框架內實際執行此操作。
我對ftrace
的使用經驗有限,儘管我已將它用於功能堆棧跟蹤和延遲問題。 (具有更多經驗的人可能會建議)使用trace-cmd
和kernelshark
的經驗基本相同。但是,如果要在內核空間中跟蹤系統調用,函數參數,內核API和返回值等,則更好的選擇是使用systemtap
。它有一個廣泛的列表Samples & Doc這是很好的函數調用跟蹤,參數值傳遞等你可能想看看一些樣本,並泰勒他們您的要求。見general/para-callgraph-verbose.stp
和process/sleeptime.stp
「
普通/準調用圖-verbose.stp - 調用圖具有詳細參數 關鍵字追蹤:TRACE調用圖
打印計時的每個線程的微秒定時調用圖,第一個參數指定要跟蹤的函數探測點,可選的第二個參數命名觸發函數的探測點,它用於僅對當前線程發生時發生的那些函數進行跟蹤嵌套在trig中蒙古包。
stap para-callgraph-verbose.stp 'kernel.function("*@fs/proc*.c")' \
'kernel.function("vfs_read")' -c "cat /proc/sys/vm/* || true"
過程/ strace.stp - 跟蹤系統調用 關鍵字:_BEST PROCESS SYSCALL
腳本鬆散模擬strace的,當(通過-c/-x)施加到各個處理或層次結構,或整個系統(不帶-c/-x)。一些輸出配置參數可以用-G設置。
stap strace.stp -c "sleep 1"
「
注意,您將需要安裝debug kernel
和kernel-devel
RPM包的正確版本/ DEB爲stap
才能正常工作。對於這個只是用stap-prep
並安裝取決於味道你顯示的依賴關係上
給「strace的」一拍它監視的相互作用betn空間和內核
樣本輸出可以在這裏找到:。 http://www.thegeekstuff.com/2011/11/strace-examples/
另外,既然你說特定的系統調用,我假設你只對其中幾個感興趣。
如果您必須單獨使用FTRACE,您可以將自己的跟蹤事件添加到include/trace/events /中的相關頭文件中。h,使用TRACE_EVENT宏並在內核中的系統調用處理程序期間調用這個新的跟蹤函數。
當然,這需要修改一些代碼,但應該很容易讓您快速進行。
因爲strace查看某個特定進程,因此我正在查找一個查看系統上所有進程的工具。 – MaxVT
如果你只是從用戶空間尋找系統調用,加上它們的參數,那麼你想要簡單的用戶區工具'strace'。 – Peter