私は真ん中に不思議なsegfaultでOSXのシェルスクリプトをデバッグしています。問題のコマンドは、スクリプトの外で実行された場合、セグメンテーションされません。通常のプログラム終了時に自動的に終了するようにGDBを設定することはできますか?
私は何とかこのプログラムを実行するには、GDBが添付されたスクリプトですべてのプログラムを実行する必要があります。プログラムを実行するようにGDBを設定し、プログラムが正しく終了した場合は終了することは可能ですか?私は、次のコードを試してみました:
echo file ifconfig > gdbcfg
echo run >> gdbcfg
echo quit >> gdbcfg
gdb -x gdbcfg
をしかし、GDBは、アプリケーションが正常に終了する前quit
コマンドを実行しようとするので、これは動作していない:(それは何とかその後にアプリケーション正常終了を待って、終了してGDBを指示することができます。 ?
私はnix toolchainにはあまりよくないので、この方法は技術的には難しく、多すぎる質問です。シェルスクリプトを最初のsegfaultの後に停止させる方法(そして最初のsegfaultの後に続くsegfaultがどこにあるか)はわかりません。コアをダンプしてGDBに戻す方法がわかりません。だから私は、各アプリの前にシェルスクリプトを起動し、GDBに侵入すると私にとって最も簡単な解決策になると思う。 – grigoryvp
ulimit -c unlimitedは、クラッシュプロセスが "core"というコアファイルをダンプするように強制します。各コマンドの後で "core"ファイルをチェックし、存在する場合は終了するようにスクリプトを設定することができます([-f core]、exit、fiの場合)。次に、gdbを実行して、クラッシュしたプロセスの最初のパラメータと、コアファイル名(core)を指定します。それで全部です。 – strkol