2012-02-18 44 views
4

我已經寫了,其測量我的C程序中的函數內部花費的時間DTrace腳本。程序本身運行,輸出一些數據然後退出。dtracing一個短暫應用

的問題是,它完成方法快,我得到的進程ID,並開始DTrace的。

目前,我有我的代碼中睡眠()語句,給了我足夠的時間來啓動DTrace的。不得不修改你的代碼以獲得它的信息有點違背了Dtrace的目的......對。

基本上就是我追求的是讓DTrace的等待一個進程ID來顯示,然後運行我的腳本反對。

+0

我不是專家,但'dtruss'可能對您有用。 – arrowd 2012-02-18 18:04:20

+0

@arrowdodger據我所知,dtruss允許您打印有關進程系統調用的信息,這實際上並不是我所追求的。基本上問題是,我的程序完成快速的方式來獲取進程ID並啓動DTrace。我修改了我的問題,使其更清楚。 – bing 2012-02-18 18:49:20

+3

由於一些奇怪的原因,我無法回答我自己的問題,所以我在這裏發佈。解決方法非常簡單,在DTrace腳本中將pid提供程序更改爲「pid $ target」,然後從命令行使用「dtrace -s myscript.d -c ./myProg myFuncToAnalyse」。 – bing 2012-02-20 11:21:45

回答

5

大概你正在使用pid提供,在這種情況下,沒有辦法已創建過程之前使這些探頭。通常的解決方案是使用「-c」選項從dtrace本身調用該程序。

如果由於某種原因,你不能這樣做(即你的過程已經在某些環境下一些其他進程設置了啓動),你可以嘗試一個更復雜的方法:使用PROC :::啓動或PROC: :: exec-success用於在程序實際啓動時進行跟蹤,使用stop()動作在該時刻停止程序,然後使用system()運行使用pid提供程序的另一個DTrace調用,然後使用「prun」該程序再次。