2011-09-11 10 views
4

私はUNIXプログラムの初心者です。私はCプログラムからgdbにコマンドを発行しなければならない状況に遭遇しました。私は新しい子プロセスを作り出すことによって別のCプログラムを呼び出すCプログラムを持っています。私はこの子Cプログラムをデバッグする必要があるので、私はこのCプログラムでgdbプロセスを呼び出すためにシステムコマンドを使用しました。しかし、私は欲しくないgdbプロンプトが表示されます。私は親のCプログラムからgdbにコマンドを出したいと思っています。 Cプログラムからgdbにコマンドを発行する方法はありますか?Cプログラムのgdbへのコマンド

ご返信ください。

ありがとうございます。

Esash

答えて

4

あなたは子プロセスをデバッグする必要がある場合は、必ずしもGDBとするときにフォーク+ Execの子供を起動する必要はありません。子プロセスのPIDを持っている限り、GDBの "attach"コマンドを使用して、実行中の子プロセスにアタッチすることができます。基本的に、あなたのようGDBを起動します:上記で

$ gdb 
(gdb) attach pid-of-child 

子プロセスのPIDと PID-の子を交換し、そこにあなたが行く、あなたは対話型のGDBから子プロセスをデバッグすることができ、親プロセスはGDBに対処する必要はありません。

2

GDBをプログラムで「駆動」する方法はいくつかあります。

1つのコマンドだけを発行したい場合は、子供がクラッシュした理由を、見つけるためにあなたがこのような何かを行うことができます。そして、あなたがコマンドラインに入れて喜んでいるより多くのコマンドがある場合

gdb --batch -ex where /path/to/child <pid-of-child> 

することは、あなたは一時ファイルに書き込む、とにGDBを求めることができますそれらを実行します。

gdb --batch -x /path/to/commandfile /path/to/child <pid-of-child> 

上記のどちらを使用すると、プログラム的(if ... then do-something-in-gdb else do-something-else-in-gdb)制御を行うことができます。

GDBのmachine interface(MI)を実行するか、embedded Python interpreterを使用することができます。

0

フォークのgdbオプションもあります。これはすぐに子プロセスにアタッチされます。

セットフォローフォーク・モードモード

ので、

セットフォローフォークモード子

関連する問題