日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kprobe与perf probe使用简单记录

發布時間:2024/3/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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使用简单记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。