Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 、Linuxのstraceのコマンドのチュートリアル

、Linuxのstraceのコマンドのチュートリアル

  
 

straceのコマンドは、ユーザ空間プログラムの呼び出しによって発行されたすべてのシステムを表示することができます強力なツールです。 straceのは、これらの呼び出しを表示し、シンボル形式で値を返します。 Straceはカーネルから情報を受け取り、特別な方法でカーネルを構築する必要はありません。いくつかの以下のレコードは、一般的にフォークを追跡しながら1つの-f -Fオプションは、straceのを指示します。オプションを使用して、ファイルにプロセス2 -o xxx.txt出力をvforkの。 ———————————————— 3 -eはexecveレコードだけが、このシステムコール&mdashの種類はexecveプロセスを開始することはできませんが、ソフトウェア速度が突然プログラム&'、鈍化; SegmentFault'ので、Unixシステムは、各ユーザ難しい問題となるようです、この論文3つの具体例は、迅速に診断するトラス、straceのとltraceの3つの一般的なデバッグツールを使用する方法を示しソフトウェア''。難病システムを追跡するトラスとstraceの処理を呼び出すか、プロセスを追跡するために使用されている信号発生器は、状況ltraceのライブラリ関数を呼び出します。システムV R4は、デバッガを開発するようトラスは早く、すべてこのツールが付属していますを含むAIX、FreeBSDのを含むほとんどのUnixシステム、;およびstraceのは、もともとのSunOSシステムのために書かれたが、ltraceのは、最初にGNU /DebianLinuxに登場しました。どちらのツールも今ではほとんどのUnixシステムに移植されている、ほとんどのLinuxディストリビューションは、straceのとltraceのが付属していますが、彼らはまた、FreeBSDのportsでインストールすることができます。だけでなく、コマンドラインからの新たなスタートのデバッグをプログラムすることができ、また、既存のPIDアップデバッガの実行にバインドされたトラス、straceのかltraceのを置くことができます。ずっと同じ基本的な使用3つのデバッグツール、ここでは3つだけがあり、および3は、最も一般的に使用されるコマンドラインパラメータです:-f:現在のプロセスを追跡することに加えて、だけでなく、自分の子供を追跡します。 -oファイル:ファイルは、出力ファイルに代わりに標準エラー出力(stderr)に書き込まれます。 -p PID:実行中のプロセスへのバインドは、PIDに対応しています。このパラメータはバックグラウンドプロセスをデバッグするためによく使用されます。上記の3つのパラメータを使用すると、基本的にほとんどのデバッグ作業を行うことができ、ここでは、コマンドラインはいくつかの例は次のとおりです。トラス-o ls.trussのls -alます。ls -alトラックを実行し、情報が書き込まれる出力ファイル/tmp /でls.truss。 straceの-f -o vim.strace VIM:VIMとサブプロセスの追跡を実行し、情報を出力ファイルvim.straceに書き込まれます。 ltraceの-p 234:追跡pidがすでに実行されているが、234を処理します。 3つのデバッグツールの出力フォーマット例をstraceのようにしても非常に類似している:BRK(0)= 0&回; 8062aa8 BRK(0&回; 8063000)= 0&回; 8063000 mmap2(NULL、4096、PROT_READ、MAP_PRIVATE、3、0回、92F )= 0&回; 40016000各行は、等号の左側のシステムコールは、コールの右側にシステムコールとそのパラメータ、戻り値の関数名です。トラス、straceのとltraceのは、ずっと同じ働き、ptraceのシステムを使用して追跡通話を試運転の過程にある、詳細な原理は、この資料の範囲内ではない、そのソースコードを参照することができます興味を持っています。二つの例これら三つのデバッグツール診断ソフトウェア&'を使用する方法を示し;':難病ケース1:ファイル名を指定して実行クリントセグメントフォルトエラープラットフォーム
があります:FreeBSDの-5.2.1リリースクリントですC ++の静的ソースコード解析ツール、および[ポートによってインストールされ、実行します。#クリントfoo.cppセグメンテーションフォールト(コアダンプ)をUnixシステム&'に会った;セグメンテーションフォールト'だけでMS のWindows
にポップ'不正な操作'迷惑なダイアログなど。 OK、我々はクリント&'するトラスを使用し、馬場舞':#トラス-f -o clint.trussクリント・セグメンテーションフォールト(コアダンプ)#テールclint.truss 739:読み取り(0回、6,0&回; 806f000,0&回; 1000) = 4096(0回; 1000)739:FSTAT(6,0xbfbfe4d0)= 0(0回、0)739:fcntlの(0回、6,0&回; 3,0&回; 0)= 4(0&回; 4)739:fcntlの(0回; 6,0&回; 4,0&回; 0)= 0(0回、0)739:閉じる(6)= 0(0回、0)739:STAT(' /root/.clint/plugins', 0xbfbfe680)ERR# 2‘そのようなファイルまたはディレクトリ’信号11信号11個のプロセスが理由で停止:16のプロセス出口、我々は次に、システムコールトラストラッククリントの実装を使用し、ファイルclint.trussに出力rvalに= 139は、尾を持つビュー最後の数行。最後のシステムコール(下から5行目)のクリントの実行注:STAT(' /root/.clint/plugins', 0xbfbfe680)#2&lsquo ERR;そのようなファイルまたはディレクトリ&rsquoを;、問題はここにある:クリントは見つけますカタログ&'未満; /root/.clint/plugins'、セグメンテーションフォールトが発生します。解決するには?非常に単純です。mkdir-p /root/.clint/pluginsですが、今度はclin​​tを実行しても「> Segmentation Fault」になります。トラストラックを使用し続け、クリントもディレクトリ&'を見つける必要がある。/root/.clint/plugins/python&'後;、通常の動作にでき、最終的にこのディレクトリのクリントを構築しました。ケースIIは:vimの起動が遅くオペレーティングシステムだった:FreeBSDの-5.2.1リリースvimのバージョン6.2.154、編集インターフェース、およびエラーなしの出力を入力することはほぼ半分の分を待つために、コマンドラインからVimを実行します。 .vimrcとすべてのvimスクリプトが誤って設定されていないこと、およびインターネット上の同様の問題に対する解決策がないことを慎重にチェックしてください。ここで#トラス-f -D -o vim.trussのvim -Dエフェクトパラメータされています:それはトラスが問題を見つけることができるようになりますと、必要でないプラスの前に出力の各ライン上の相対的なタイムスタンプ、つまり、システムコールのコストの各実装時間。限り、我々はシステムコールがそれに長い時間を費やしたかに焦点を当てるよう、より少ない慎重で出力ファイルvim.trussを見て、すぐに間違いが見つかりました:735:0.000021511ソケット(0回、2,0&回; 1,0&回; 0)= 4(0&回; 4)735:0.000014248のsetsockopt(0時間; 4,0&回; 6,0&回; 1,0xbfbfe3c8,0&回; 4)= 0(0回、0)

Copyright © Windowsの知識 All Rights Reserved