Linuxで truss
Solarisユーティリティの-T
および-U
オプションと同等の機能はありますか?.
これらは、システムコール(-T
)またはライブラリ関数(-U
)を指定して、トレースされたアプリケーションによって呼び出されると、アプリケーションを停止させます。
または、別の言い方をすると、特定のシステムコールまたは特定の共有ライブラリー関数の呼び出しを行うとすぐに、トレースされたアプリケーションによって開始されたプロセスを停止します(SIGSTOPによって強制終了されたかのように)。
Linuxのstrace
とltrace
は、Solaris truss
の機能セットの多くを備えていますが、実際にはそうではないようです。
例えば:
truss -f -T open cmd
strace -f cmd
のようになりますが、cmd
またはその子孫のいずれかを実行しているプロセスがopen
システムコールを実行すると、すぐに停止します(後で再開できます)。私の都合)
場合によっては、gdb
のcatch syscall
を使用することもできますが、フォークを便利に追跡し、フォークされたすべてのプロセスに対してそれを続行し、execve
s。
同じ機能を提供しているユーティリティ、またはシステムコールがリモートで発生している間にシングルステップアプリケーションに1つ(または同じユーティリティのオプション)を提供しているユーティリティを思い出しているようですが、メモリに問題があり、確信が持てません。それはLinux上でした。
私の知る限りでは、これはstrace
では実行できません。内部で使用されるptrace
関数は、呼び出し時にSIGSTOP
またはSIGINT
を実行します。
この簡単なソリューションを ministrace に挿入したので、コーディングは必要ありません。
私の提案する解決策は、straceのすべての機能が必要なわけではない場合、ここで見つけたministraceを変更することです 70行のコードでstraceを自分で記述してください 。
ワンショットプログラムでは、次のコードの前に2行追加できます。
if (wait_for_syscall(child) != 0) break;
if(syscall == SYS_write)
do {
char str[4];
gets(str); // waits until enter to continue
} while(0);
私はこれをいじらなかった、これらの最後のステップはあなたに任されている。
Systemtapはあなたが探していることを実行できるはずです、それはそれのための素晴らしいガイドです: