2012-03-13 8 views
0

私は真ん中に不思議なsegfaultでOSXのシェルスクリプトをデバッグしています。問題のコマンドは、スクリプトの外で実行された場合、セグメンテーションされません。通常のプログラム終了時に自動的に終了するようにGDBを設定することはできますか?

私は何とかこのプログラムを実行するには、GDBが添付されたスクリプトですべてのプログラムを実行する必要があります。プログラムを実行するようにGDBを設定し、プログラムが正しく終了した場合は終了することは可能ですか?私は、次のコードを試してみました:

echo file ifconfig > gdbcfg 
echo run >> gdbcfg 
echo quit >> gdbcfg 
gdb -x gdbcfg 

をしかし、GDBは、アプリケーションが正常に終了する前quitコマンドを実行しようとするので、これは動作していない:(それは何とかその後にアプリケーション正常終了を待って、終了してGDBを指示することができます。 ?

答えて

1

が理由だけではなく、コアファイルをダンプし、それを分析するためのプロセスを作ってみませんか?

はたぶん私のアプローチは、あまりにもcomplesあり、それはいくつかのGDBフラグのようなものだ「負荷とすべてがOKであれば終了し、このアプリケーションを実行します」後でgdbで?私はulimit -c unlimitedを意味します(コアがダンプされた後).gdb ./process core?

+0

私はnix toolchainにはあまりよくないので、この方法は技術的には難しく、多すぎる質問です。シェルスクリプトを最初のsegfaultの後に停止させる方法(そして最初のsegfaultの後に続くsegfaultがどこにあるか)はわかりません。コアをダンプしてGDBに戻す方法がわかりません。だから私は、各アプリの前にシェルスクリプトを起動し、GDBに侵入すると私にとって最も簡単な解決策になると思う。 – grigoryvp

+0

ulimit -c unlimitedは、クラッシュプロセスが "core"というコアファイルをダンプするように強制します。各コマンドの後で "core"ファイルをチェックし、存在する場合は終了するようにスクリプトを設定することができます([-f core]、exit、fiの場合)。次に、gdbを実行して、クラッシュしたプロセスの最初のパラメータと、コアファイル名(core)を指定します。それで全部です。 – strkol

1

しかし、GDBは、アプリケーションが何

を終了する前に、コマンドを終了していない実行しようとするので、これが動作していません。(あなたは実際コードを貼り付けたと仮定すると)gdbcfgは単一quit後が含まれているため、それは働いていませんコマンドが実行されます(そして、runはありません)。何が欲しいのです:

echo file ifconfig > gdbcfg 
echo run >> gdbcfg 
echo quit >> gdbcfg 
gdb -x gdbcfg 

ことを綴るために、よりUNIXyの方法は次のとおりです。

echo >gdbcfg <<EOF 
file ifconfig 
run 
quit 
EOF 

gdb -x gdbcfg 

更新:

gdbcfgのファイルの内容は、すべての3つのコマンドの後、ご理解が含まれている場合問題はが正しくありません:GDBは各コマンドが完了するのを待ってから次のコマンドを実行します。

+0

申し訳ありませんが、ここに掲載されているコードサンプルの誤字です。実際のファイルはviで編集され、次の3つのコマンドをすべて含んでいます:(P.S. – grigoryvp

関連する問題