-T
と-U
オプションに該当するものはありますか?truss
SolarisユーティリティはLinuxでこれを行います。
これは、追跡対象のアプリケーションが呼び出されたときにアプリケーションを停止するシステム呼び出し(-T
)またはライブラリ関数()を指定するために使用されます。-U
つまり、追跡されたアプリケーションによって開始されたすべてのプロセスが、指定されたシステム呼び出しまたは特定の共有ライブラリ関数呼び出しを実行するとすぐに停止(SIGSTOPによって終了したかのように)されることを意味します。
strace
ltrace
ほとんどのSolaris機能セットはLinuxで利用できますが、そうtruss
しないようです。
たとえば、
truss -f -T open cmd
strace -f cmd
実行中のプロセスcmd
またはそのサブプロセスがシステムコールを実行している場合を除き、open
すぐに停止します。 (後で便宜に応じて再開できます。)
場合によっては 'を使用できますが、gdb
フォークを簡単に追跡し、s以降もフォークされたすべてのプロセスに対してこの作業を続けることができるソリューションを探していましたcatch syscall
。execve
一部のユーティリティは、特定のリモートシステムコール間で単一ステップを実行するために同じ機能または機能(または同じユーティリティのオプション)を提供していますが、記憶が不十分で確実ではありません。それはLinuxにあります。
答え1
私が知る限り、内部的に使用される関数やstrace
呼び出し時にはこれを行うことはできません。ptrace
SIGSTOP
SIGINT
編集する:
この簡単な解決策を挿入しました。ミニストリーしたがって、エンコードは必要ありません。
straceのすべての機能が必要ない場合、私が提案する解決策はministraceを修正することです。ここで見つけました。70行のコードで直接トレースを作成してください。。
ワンタイムプログラムでは、次のコードの前に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);
まだテストしていないので、最終段階はあなたに任せます。
答え2
Systemtapはあなたが探していることができるはずです。ここに良いガイドがあります: