[私のLinuxは、私がショットを呼び出します!straceのをデバッグする手順の詳細]

内容:
(A)のstraceコマンドはじめに
(B)のstraceコマンド戦闘


(A)のstraceコマンドは、はじめに
、我々はユーザー空間のLinuxシステムでプログラムを実行すると(1.1)のstraceコマンドは主に、私たちのプログラムの実施を監視するために、我々は、プロセスの形態で包装Linuxシステムを実行していることになるプログラムを使用しています我々は、それがユーザプロセスとカーネルプロセスを監視し、そのような相互作用の操作に関連し、そしてプロセスのシステムコール、シグナル伝達、ステータスの変更を追跡している私たちのアプリケーションを追跡するためにstraceのコマンドを使用できるようにしてから、オペレーティングシステムのスケジューラに参加。この時点で、我々は我々のプログラムのエラーのために具体的な理由をデバッグするには、このコマンドのstraceのを使用することができます。
オープン、クローズ、読み取り、書き込み:(1.2)一般的には、当社のシステムコールは①ファイルやデバイスへのアクセスなどが 、IOCTL 、等、②プロセス管理:フォーク、クローン、execveの、終了、等、③信号:信号、キル、等。④メモリを管理:BRK、MMAP、MLOCKなど;プロセス間通信⑤:semgetから、セマフォ、メッセージキュー、など、ネットワーク通信⑥:ソケット、接続、等
パラメータ意味と(1.3)straceのコマンドは以下の通りである:
- C:各システムコール統計の実行時間を、数、エラーの頻度が
-d:標準誤差情報にstraceの出力
-f:トレース呼び出しをフォークすることによって子プロセスが生成さ
-FF:あなたは-oファイル名を指定した場合は、適切なfilename.pidへの出力のすべてのプロセスの結果を追跡し、pidはそれぞれのプロセスIDです
-F:のvforkの呼び出しを追跡してみてください、-f、のvforkがないとき追跡
-h:短い出力ヘルプ情報
-i:エントリポインタ出力システムコール
-q:上のメッセージからの無効出力
-r:各システムコールに対する相対時間を印刷
-t:出力の各行を追加する前時間の情報
-tt:時間情報マイクロ追加する前に、出力の各行
-ttt:秒でマイクロ出力、時間が
-T:各呼び出しを表示する経過する
-v:すべてのシステムコールの出力、頻繁にではなく、デフォルトの出力を使用する呼び出し、環境変数、状態、入力、出力に関するいくつかの呼び出し、
straceの出力バージョン情報:-V
-x:16進形式で非標準出力文字列は、
-XX:16進数ですべての文字列出力16進形式
の-a cloumn:戻り値の出力先を設定し、デフォルトの40
-e [式]:[!]どのトラック、フォーマット[修飾子= ON] VALUE1 [、値2]制御するために使用される指定する式
修飾子のみに冗長トレース、略語、生することが可能である葛、[リード]、[書き込み] 、感嘆符記号は負の値を記号や数字を定義するために使用され、デフォルト修飾子がトレースです。たとえば:-eトレースに-eopen同等=オープンは、オープン他の呼び出しに加えて、唯一のオープンコールを追跡し、-etrace =オープン特急トラックを表し、二つの特別な記号すべてとなし、ノートの使用にはいくつかのシェルそれがあります!コマンド実行の歴史の中で、あなたは\使用したいので
、トレース-e = [SET]はちょうど例えば、指定されたシステムコールを追跡:-eトレースは=オープン、クローズ、 rean、書き込みはそのわずか4追跡システムコールを示します。SETのデフォルト=すべて
のトレース-eは= [ファイル]のみコールファイルシステムについてトレース
-eトレース=プロセスのみ呼び出しプロセス制御システムについての情報を追跡
=ネットワークは、すべてのネットワーク関連のシステムコールを-eトレースを追跡します
-e straceの=信号トレースすべてのシステム関連信号システムコール
-eトレース=通信システムに関連するすべてのプロセスのIPCキープトラックコール
システムコールの-e略語=設定された設定straceの出力結果セット、-vなどと略称=どれも、デフォルトではありません略語=すべて
の生= -eシステムコールのパラメータは16進数で指定して設定
=セット信号追跡システムは、指定され、デフォルトでは、すべてで、そのような信号として=!SIGIOが、彼らはSIGIOを追跡していないと述べ-e信号信号が
読み出さ-e =設定された出力は、例えば、指定されたファイルからデータを読み出す:読み取り= 3,5 -e
-e = SET書き込みデータが指定した出力ファイルに書き込まれる
出力ファイルのファイル名straceのに書き込ま-oファイル名
-p PID PID追跡プロセスは、指定され
た文字列-s strsizeの最大長さの出力を指定し、デフォルトは32であり、出力ファイル名の全て有する
追跡するためのユーザー名UIDとGIDを実行する-u usernameコマンドを
我々はシステムを持っている(1.4)プログラムファイルを編集した後strace.c、その後、次のコードを書く(図1-1)、次いでプログラムstrace.cのGCCコンパイラを使用して自動的にシステム内の実行可能ファイルa.outを生成し、次いで私たちは、a.outのファイルシステムを実行した後、ファイルのエラーが発生したとTEST.DAT(図1-2)を生成します。
[私のLinuxは、私がショットを呼び出します! straceのをデバッグする手順の詳細]
[私のLinuxは、私がショットを呼び出します! straceのをデバッグする手順の詳細]
(1.5)、その後、我々は、ビューのプロセス関連のシステムコール./a.out実行にstraceのコマンドを使用することができます。
#straceの./a.out---ビュー./a.out実行時間プロセス関連のシステムコール
[私のLinuxは、私がショットを呼び出します! straceのをデバッグする手順の詳細]


(二)strace命令实战
(2.1)查看一个程序所有的open、close系统调用。
# strace -e open,close ./a.out---使用-e参数查看a.out执行文件的open和close的调用情况
[私のLinuxは、私がショットを呼び出します! straceのをデバッグする手順の詳細]
(2.2)查看每个系统调用消耗的时间。
# strace -T -e open,close ./a.out---我们使用-T参数可以查看系统每个系统调用所消耗的时间
[私のLinuxは、私がショットを呼び出します! straceのをデバッグする手順の詳細]
(2.3)统计系统调用次数、错误次数统计。
# strace -c -e open,close ./a.out---使用-c参数查看系统调用次数和错误次数统计
[私のLinuxは、私がショットを呼び出します! straceのをデバッグする手順の詳細]
(2.4)打印系统调用的时间戳。
# strace -t -T -e open,close ./a.out---使用-t命令可以查看系统调用的时间戳
# strace -tt -T -e open,close ./a.out---此时我们可以查看微秒级的系统调用的时间戳
[私のLinuxは、私がショットを呼び出します! straceのをデバッグする手順の詳細]
[私のLinuxは、私がショットを呼び出します! straceのをデバッグする手順の詳細]
(2.5)将跟踪日志保存到log文件中。
# strace -tt -T -e open,close -o log ./a.out---我们可以使用-o参数将跟踪日志保存到log文件中
[私のLinuxは、私がショットを呼び出します! straceのをデバッグする手順の詳細]
(2.6)最后我们再来分析一下使用strace -e来查看open系统调用后的问题与状态,当我们打开一个文件是成功的时候,那么系统会返回一个非负整数,所以系统在打开test.dat文件时,会返回一个3值,但是如果我们打开一个文件是失败的,那么系统会返回一个负数,所以此时系统打开并不存在的hello.dat文件时,返回的是-1值。由此我们便可以实现通过strace命令来查找程序运行报错原因的目标。
オープンシステムコールのすべてを表示するには、#straceの-eオープン./a.out---プログラム
[私のLinuxは、私がショットを呼び出します! straceのをデバッグする手順の詳細]

------この記事を締結、読んでくれてありがとう------

おすすめ

転載: blog.51cto.com/13613726/2461841