kprobe与perf probe使用简单记录
kprobe事件添加格式:
p[:[GRP/]EVENT] [MOD:]SYM[+offs]|MEMADDR [FETCHARGS] --增加探測點
r[:[GRP/]EVENT] [MOD:]SYM[+0] [FETCHARGS] --增加return探測點
-:[GRP/]EVENT --刪除探測點
各字段說明:
GRP : Group name. If omitted, use “kprobes” for it. --指定后會在events/kprobes目錄下生成對應名字的目錄,一般不設
EVENT : Event name. If omitted, the event name is generated?based on SYM+offs or MEMADDR. --指定后會在events/kprobes/<GRP>目錄下生成對應名字的目錄
MOD : Module name which has given SYM. --模塊名,一般不設
SYM[+offs] : Symbol+offset where the probe is inserted. --指定被探測函數和偏移
MEMADDR : Address where the probe is inserted. --指定被探測的內存絕對地址
FETCHARGS : Arguments. Each probe can have up to 128 args. --指定要獲取的參數信息
%REG : Fetch register REG --獲取指定寄存器值
@ADDR : Fetch memory at ADDR (ADDR should be in kernel) --獲取指定內存地址的值
@SYM[+|-offs] : Fetch memory at SYM +|- offs (SYM should be a data symbol) ?–獲取全局變量的值
$stackN : Fetch Nth entry of stack (N >= 0) --獲取指定棧空間值,即sp寄存器+N后的位置值
$stack : Fetch stack address. --獲取sp寄存器值
$retval : Fetch return value.(*) --獲取返回值,僅用于return probe
+|-offs(FETCHARG) : Fetch memory at FETCHARG +|- offs address.(**) --以下可以由于獲取指定地址的結構體參數內容,可以設定具體的參數名和偏移地址
NAME=FETCHARG : Set NAME as the argument name of FETCHARG.
FETCHARG:TYPE : Set TYPE as the type of FETCHARG. Currently, basic types (u8/u16/u32/u64/s8/s16/s32/s64), “string” and bit field are supported.
使用例子:
切換目錄:
[root@localhost ~]# cd /sys/kernel/debug/tracing
添加返回事件探測點:
[root@localhost tracing]# echo ‘r:myretprobe acl_permission_check ret=$retval’ >> kprobe_events
查看輸出格式:
[root@localhost tracing]# cat events/kprobes/myretprobe/format
啟用跟蹤:
[root@localhost tracing]# echo 1 > events/kprobes/myretprobe/enable
執行相關命令
停止跟蹤:
[root@localhost tracing]# echo 0 > events/kprobes/myretprobe/enable
查看結果:
[root@localhost tracing]# cat trace
刪除探測點:
[root@localhost tracing]# echo ‘-:myretprobe’ >> kprobe_events
通過以上方法添加事件探測點后,也可以通過perf probe查到相關事件,并可以跟蹤和移除該事件:
[root@localhost ~]# perf probe --list
/sys/kernel/debug/tracing/uprobe_events file does not exist - please rebuild kernel with CONFIG_UPROBE_EVENTS.
kprobes:myretprobe (on acl_permission_check%return with ret)
跟蹤:
[root@localhost ~]# perf record -e kprobes:myretprobe -aR
獲得結果:
[root@localhost ~]# perf script
移除事件:
root@localhost ~]# perf probe -d kprobes:myretprobe
PS:在生產系統中使用perf probe時居然不能添加return探測點(測試系統可以正常添加),原因未知,因此使用了kprobe來增加return探測點,添加后一樣可以使用perf record進行跟蹤
參考:
https://blog.csdn.net/luckyapple1028/article/details/52972315/
http://www.brendangregg.com/perf.html
man perf-probe
總結
以上是生活随笔為你收集整理的kprobe与perf probe使用简单记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请教个问题,我想把数据中名字的重复值删掉
- 下一篇: Linux云计算-02_CentOS L