私は2つのncursesウィンドウを持つプログラムに取り組んでいます。 1つはfork + execを使用して実装されたカスタムシェルを示し、もう1つは私のシェルで実行されているコマンドに関するいくつかの情報を表示したいと思います。そのためにGDBを使ってみました。
私の考えは、バックグラウンドでGDBを実行し、いくつかのブレークポイントを設定し、いくつかの情報を私のncursesアプリケーションが読み取り、フォーマット、表示するファイルに印刷することです。
問題は、入力が端末から出ないと自動的に終了するため、プロンプトなしでGDBを実行できないことです。次のスクリプトを使用しています。
./bin/pE_application &
pid=$(ps -C pE_application -o pid=)
gdb --command=examine_memory.gdb --pid="$pid" > "$GDB_TMP" 2>&1 &
pE_jid=$(jobs | grep pE_application | grep -oE "^\[[0-9]\]" | sed 's/\[//g' | sed 's/\]//g')
fg "%""$pE_jid"
ここで、pE_applicationは私のncursesアプリケーションです。 Exam_Memory.gdbは、起動時に情報をダンプできるようにrun_shell関数にブレークポイントを設定しようとする起動スクリプトです。
set follow-fork-mode parent
info functions
break run_shell
command 1
p 'pE_application.c'::unparsed_cmd
continue
end
バッチモードを試しましたが、initスクリプトの実行後にGDBが終了します。バッチモードがない場合は、出力が端末から出ておらず、出力ファイルが次のようになるため、GDBは終了します。
*some info*
...
Quit anyway? (y or n) [answered Y; input not from terminal]
または、tty 停止信号のため実行できません。ブレークポイントとコマンドを使用して起動スクリプトを維持するだけで、I / OなしでバックグラウンドでGDBを実行する方法があるかどうかを確認します。
ありがとう