GNU/Linux >> Linux の 問題 >  >> Linux

特定の実行可能ファイルからの入出力を傍受する

オプション 1 は、呼び出し元アプリのソース コードを変更し、tee を挿入することです。

オプション 2 は、問題の実行可能ファイルの周りにラッパー スクリプトを記述することです。 stdin と引数を実際のアプリに渡し、tee が出力をレビュー用の場所に渡し、アプリと同じようにそれを吐き出す簡単なスクリプトは、ほんの数行で作成する必要があります。特別な場所に置き、その場所を PATH 変数の前に追加してから、アプリケーションを実行してください。

#!/bin/sh
cat - | /path/to/realapp [email protected] | tee /tmp/debug_output

strace の下で呼び出すことにより、プログラムに関する多くの情報を取得できます。 .これは、プログラムが行うすべてのシステム コールを示しています。これは情報が多すぎる場合がありますが、何が問題なのかを見つけるのに非常に役立ちます。

アプローチ 1 は、大きなアプリケーションを strace 未満で実行することです .これにより、大量の出力が生成され、アプリケーションの速度が低下する可能性があります。

strace -s9999 -efile,process -f -o bigapp.strace bigapp

大きなアプリケーションがインタラクティブな場合は、それを開始して、計算をトリガーする準備ができたら strace を接続することをお勧めします。アプリケーションのプロセス ID、たとえば 12345 をメモして実行します

strace -s9999 -efile,process -f -o bigapp-calculations.strace -p12345

その外部実行可能ファイルを観察するだけで十分な場合は、他の回答が既に示唆しているように、その実行可能ファイルをラッパー スクリプトに置き換えます。実行可能ファイルを別の名前に移動してその場所にラッパー スクリプトを配置するか、PATH 内の通常の実行可能ファイルの前にラッパー スクリプトを配置できます。 、または通常の実行可能ファイルの代わりにラッパースクリプトを呼び出すようにアプリケーションを構成します。そのラッパー スクリプトを作成します

#!/bin/sh
exec strace -s9999 -efile -o auxapp-$$.strace /path/to/original/executable "[email protected]"

使用される strace パラメータの説明:

  • -e トレースするシステム コールを選択します。名前でシステム コールを指定するか、file などのいくつかのカテゴリを使用できます。 (openclosereadwrite 、…) および process (forkexecve 、…)
  • -f strace をフォークに追従させます。つまり、サブプロセスと元のプロセスをトレースします。
  • -o トレースを含むファイルの名前を選択します。 $$ シェルプロセスのプロセス ID を表すシェル構造です (exec の使用による) 最後のラッパー スクリプトでは、補助アプリケーションのプロセス ID にもなります)。
  • -s9999 read のバイト数を表示します と write およびその他の呼び出し。

パスを変更するのではなく、関心のあるバイナリを「binary」から「binary.orig」に移動してから、スクリプトに置き換える必要があります。あなたは引数に興味があると言ったので、それらもファイルに書き出す必要があります。おそらく、コマンド「env」の出力にも興味があるでしょう。現在アクティブなすべての環境変数をダンプします。環境変数は、あるプログラムが呼び出す別のプログラムの動作に影響を与えるためによく使用されます。


Linux
  1. キーボード入力とテキスト出力はどのように機能しますか?

  2. スクリプト出力から制御文字(コンソールコード/色を含む)を削除しますか?

  3. 特定の実行可能ファイルからの入力と出力をインターセプトしますか?

  1. UNIX シェル スクリプトからファイルを ftp およびダウンロードする方法

  2. MYSQL はスクリプトからの出力が異なります

  3. シェルスクリプトだけを使用してテキストファイルから特定の行を取得する

  1. Linuxでの入出力とエラーリダイレクトの操作

  2. Linux で入出力エラーを解釈して修正する方法は?

  3. ファイルから (特定の行と列の) 値を抽出し、それを新しい変数に割り当てる方法