DTrace を呼び出して、ユーザーが指定したプログラムをトレースするツールを作成しています。
私のツールが dtrace -c を使用してプログラムを DTrace のサブプロセスとして実行する場合、プログラムに引数を渡すことができないだけでなく、プログラムは DTrace のすべての権限で実行されます。 Mac OS X)。これにより、機能するはずの特定の機能が壊れてしまい、明らかに、機能しないはずの非常に多くのことが可能になります。
私が知っている他の解決策は、自分でプログラムを開始し、それを送信して一時停止しSIGSTOP
、その PID を に渡しdtrace -p
、次に送信して続行することSIGCONT
です。問題は、DTrace がシンボル情報を収集している間、プログラムがトレースされずに数秒間実行されるか、プロセスを続行する前に数秒間スリープすると、DTrace がobjc<pid>:<class>:<method>:entry
一致するプローブがないと文句を言うことです。
root としてではなく、ユーザーのアカウントでプログラムを実行し、DTrace で最初から追跡できるようにする方法はありますか?