非常に複雑なシェルスクリプトがあり、その中でGDBを介してデバッグしたいC++プログラムを呼び出します。このc ++プログラムには多くのブランチと多くの環境変数設定があるため、このc ++プログラムをシェルから分離することは非常に困難です。
このシェルスクリプトでGDBを呼び出す方法はありますか? gdb
では、C++プログラムを直接呼び出す必要があるようです。
実行できるオプションは2つあります。
シェルスクリプト内で直接GDBを呼び出します。これは、標準入力と標準出力がリダイレクトされていないことを意味します。
シェルスクリプトを実行してから、次のようにデバッガーを既に実行中のC++プロセスに接続します。gdb progname 1234
どこ 1234
は、実行中のC++プロセスのプロセスIDです。
プログラムの実行を開始する前に何かを行う必要がある場合は、オプション1の方が適しています。それ以外の場合は、オプション2の方が適切です。
@ diverscuba23で言及されているオプションに加えて、次のことができます。
gdb --args bash <script>
(それがbashスクリプトであると仮定します。それ以外の場合はそれに応じて適応します)
おそらく、スクリプトを変更して常にgdbを呼び出す(そして後でこれを元に戻す)か、gdbを呼び出すオプションを追加します。これはほとんどの場合、最も簡単な解決策になります。
次に簡単なのは、実行可能ファイルを一時的に移動し、移動したプログラムでgdbを実行するシェルスクリプトに置き換えることです。たとえば、プログラムを含むディレクトリでは、次のようになります。
$ mv program _program
$ (echo "#!/bin/sh"; echo "exec gdb $PWD/_program") > program
$ chmod +x program
Pidを出力して30秒スリープするようにc ++アプリケーションを変更します(おそらく環境または引数に基づいて)。 gdbを使用して実行中のインスタンスにアタッチします。
スクリプトにgdb
を一時的に追加できますか?