2013-06-19 14 views
3

嗯,我正試圖在SDT標記上探測我自己的應用程序。我寫了一個systemtap腳本來探測它,但systemtap顯示沒有錯誤直到通過5,然後通過5(開始運行)後,它只是無所事事。這是我與SDT標記C程序:使用systemtap探測用戶空間

foo.c的:

#include <sys/sdt.h> 
#include <stdio.h> 

    int main(void) 
    { 
     printf("Before Marker\n"); 
     DTRACE_PROBE(user_app, foo_start); 
     printf("After Marker\n"); 
     return 0; 
    } 

而且我SystemTap的腳本是:

probe_foo.stp

probe process("./user_app").mark("foo_start") 
{ 
    exit(); 
} 

我運行的命令是:

stap -v probe_foo.stp 

這就是我得到的:

Pass 1: parsed user script and 98 library script(s) using 217528virt/36580res/2976shr/34316data kb, in 190usr/30sys/222real ms. 

Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) using 218596virt/38164res/3424shr/35372data kb, in 10usr/0sys/13real ms. 

Pass 3: using cached /root/.systemtap/cache/a6/stap_a6e78dea575657695c4456347007229d_990.c 

Pass 4: using cached /root/.systemtap/cache/a6/stap_a6e78dea575657695c4456347007229d_990.ko 

Pass 5: starting run. 

之後它等待無限。 我的內核版本是3.8.0,我使用的是fedora 18.

回答

4

這看起來很正常。沒有跡象表明你曾經啓動過./user_app二進制文件,所以systemtap探針永遠不會被打開,所以它從來沒有任何理由退出()。

嘗試,而不是

stap -t probe_foo.stp -c ./user_app 

在「-c ./user_app」將運行給定應用,(和限制探測到它,而不是全系統),和「-t」會給出一個整體的探頭命中在腳本關閉時計數/次。 (因爲你只有一個探針可以退出(),所以這個報告將是微不足道的。)

+0

非常感謝,所以我需要先運行程序,然後使用stap -t probe_foo.stp ... –