Linuxでは、「truss -T」と「truss -U」は同じですか?

Linuxでは、「truss -T」と「truss -U」は同じですか?

-T-Uオプションに該当するものはありますか?trussSolarisユーティリティはLinuxでこれを行います。

これは、追跡対象のアプリケーションが呼び出されたときにアプリケーションを停止するシステム呼び出し(-T)またはライブラリ関数()を指定するために使用されます。-U

つまり、追跡されたアプリケーションによって開始されたすべてのプロセスが、指定されたシステム呼び出しまたは特定の共有ライブラリ関数呼び出しを実行するとすぐに停止(SIGSTOPによって終了したかのように)されることを意味します。

straceltraceほとんどのSolaris機能セットはLinuxで利用できますが、そうtrussしないようです。

たとえば、

truss -f -T open cmd

strace -f cmd実行中のプロセスcmdまたはそのサブプロセスがシステムコールを実行している場合を除き、openすぐに停止します。 (後で便宜に応じて再開できます。)

場合によっては 'を使用できますが、gdbフォークを簡単に追跡し、s以降もフォークされたすべてのプロセスに対してこの作業を続けることができるソリューションを探していましたcatch syscallexecve

一部のユーティリティは、特定のリモートシステムコール間で単一ステップを実行するために同じ機能または機能(または同じユーティリティのオプション)を提供していますが、記憶が不十分で確実ではありません。それはLinuxにあります。

ベストアンサー1

私が知る限り、内部的に使用される関数やstrace呼び出し時にはこれを行うことはできません。ptraceSIGSTOPSIGINT

編集する:

この簡単な解決策を挿入しました。ミニストリーしたがって、エンコードは必要ありません。

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);

まだテストしていないので、最終段階はあなたに任せます。

おすすめ記事