C言語のプログラムで関数内で費やされた時間を測定するDTraceスクリプトを作成しました。プログラム自体が実行され、データが出力されて終了します。短命のアプリケーションのトレースを外す
問題は、私がプロセスIDを取得してDTraceを開始する方法が完了したことです。
現時点では、自分のコードの中にsleep()ステートメントがあり、DTraceを起動するのに十分な時間があります。情報を取得するためにあなたのコードを変更しなければならないのは、Dtraceの目的をちょうど打ち負かすことです。
基本的には、DTraceがプロセスIDを表示してからスクリプトを実行するのを待つようにしています。
私は専門家ではありませんが、 'dtruss'はあなたにとって役に立つかもしれません。 – arrowd
@arrowdodger私が知る限り、dtrussはプロセスシステムコールの情報を表示することができます。基本的に問題は、私のプログラムがプロセスidを取得してDTraceを開始するために速く終わるということです。私はより明確にするために私の質問を修正しました。 – bing
私は自分の質問に答えることができない奇妙な理由から、私はここにそれを掲示しています。解決策は非常に簡単です.DTraceスクリプトでpidプロバイダを "pid $ target"に変更し、コマンドラインから "dtrace -s myscript.d -c ./myProg myFuncToAnalyse"を使用します。 – bing