systemtap除錯核心

2021-07-30 08:42:16 字數 2614 閱讀 7385

systemtap是核心開發者必須要掌握的乙個工具,本文我將簡單介紹一下此工具,後續將會有系列文章介紹systemtap的用法。

假如現在有這麼乙個需求:需要獲取正在執行的 linux 系統的資訊,如我想知道系統什麼時候發生系統呼叫,發生的是什麼系統呼叫等這些資訊,有什麼解決方案呢?

下面將會介紹systemtap的安裝、systemtap的工作原理以及幾個簡單的示例。

我的主機 linux 發行版是32位 ubuntu13.04,核心版本 3.8.0-30。由於 systemtap 執行需要核心的除錯資訊支撐,預設發行版的核心在配置時這些除錯開關沒有開啟,所以安裝完systemtap也是無法去探測核心資訊的。 下面我以兩種方式安裝並執行 systemtap:

編譯核心以支援systemtap 

我們重新編譯核心讓其支援systemtap,首先你想讓核心中有除錯資訊,編譯核心時需要加上 -g 標誌;其次,你還需要在配置核心時將 kprobe 和 debugfs 開關開啟。最終效果是,你能在核心 .config 檔案中看到下面四個選項是設定的:

config_debug_info

config_kprobes

config_debug_fs

config_relay

配置完之後,按照之前你編譯核心的步驟編譯即可。

git clone git:
./configure --with-elfutils=~/document/elfutils-0.156
以這裡方法配置之後,你只需要再執行 make install 即完成systemtap的編譯安裝。如果需要解除安裝的話,執行 make uninstall。

$ wget 

$ sudo dpkg -i linux-image-debug-3.8.0-30-generic_dbgsym_3.8.0-30.43_i386.ddeb

$sudo apt-get install systemtap
當然方法二僅限於ubuntu發行版,至於其他的發行版並不能照搬,網上也有很多相關的資料。

安裝完systemtap之後,我們需要測試一下systemtap是否能正確執行:

以root使用者或者具有sudo許可權的使用者執行以下命令:

$stap -ve 'probe begin '
如果安裝正確,會得到如下類似的輸出結果:

pass 1: parsed user script and 96 library script(s) using 55100virt/26224res/2076shr/25172data kb, in 120usr/0sys/119real ms.

pass 2: analyzed script: 1 probe(s), 2 function(s), 0 embed(s), 0 global(s) using 55496virt/27016res/2172shr/25568data kb, in 0usr/0sys/4real ms.

pass 3: translated to c into "/tmp/stapyqnuf9/stap_e2d1c1c9962c809ee9477018c642b661_939_src.c" using 55624virt/27380res/2488shr/25696data kb, in 0usr/0sys/0real ms.

pass 4: compiled c into "stap_e2d1c1c9962c809ee9477018c642b661_939.ko" in 1230usr/160sys/1600real ms.

pass 5: starting run.

hello systemtap!

pass 5: run completed in 0usr/10sys/332real ms.

建立systemtap指令碼檔案test2.stp:

#!/usr/bin/stap

probe begin

probe syscall.open

probe timer.ms(4000) # after 4 seconds

probe end

將該指令碼新增可執行的許可權chmod +x test2.stp,使用./test2.stp執行該指令碼,即可列印4s內所有open系統呼叫的資訊,列印格式為:程序名(程序號)開啟什麼檔案。 大家可以自行去測試,如果兩個示例都能正確執行,基本上算是安裝成功了!

systemtap 的核心思想是定義乙個事件(event),以及給出處理該事件的控制代碼(handler)。當乙個特定的事件發生時,核心執行該處理控制代碼,就像快速呼叫乙個子函式一樣,處理完之後恢復到核心原始狀態。這裡有兩個概念:

systemtap 工作原理是通過將指令碼語句翻譯成c語句,編譯成核心模組。模組載入之後,將所有探測的事件以鉤子的方式掛到核心上,當任何處理器上的某個事件發生時,相應鉤子上控制代碼就會被執行。最後,當systemtap會話結束之後,鉤子從核心上取下,移除模組。整個過程用乙個命令stap就可以完成。 上面只是簡單的原理,更多背後的機理參考網上資料和相應的**。 圖 systemtap 處理流程

使用 SystemTap 除錯核心

systemtap 是一種新穎的 linux 核心診斷工具,提供了一種從執行中的 linux 核心快速和安全地獲取資訊的能力。systemtap 是核心開發人員和系統管理員的福音,因為這使得他們可以通過編寫或者重用簡單的指令碼來收集核心的實時資料,而不需要再忍受修改原始碼 編譯核心 重啟系統的漫長煎...

使用 SystemTap 除錯核心

systemtap 是一種新穎的 linux 核心診斷工具,提供了一種從執行中的 linux 核心快速和安全地獲取資訊的能力。systemtap 是核心開發人員和系統管理員的福音,因為這使得他們可以通過編寫或者重用簡單的指令碼來收集核心的實時資料,而不需要再忍受修改原始碼 編譯核心 重啟系統的漫長煎...

systemtap安裝 核心除錯環境配置

參考其官網 我是在ubuntu下安裝的,所以轉至這個網頁 systemtaponubuntu 參考網頁 1.systemtap的安裝 systemtap的安裝是很簡單的,一條命令足以 sudo apt get install systemtap 此時,你執行如下測試命令 sudo stap ve p...