4

私は GNU autotools を使用するプロジェクトに取り組んでいるので、gdb を使用してコードをデバッグするために、libtool 内から gdb を実行しています。

libtool --mode=execute gdbtui foobar

gdb/libtool を終了して再起動する手間をかけずに、変更されたバージョンのプロジェクトを再読み込みできますか?

4

3 に答える 3

2

libtool --mode=executegdb に渡される一時的な実行可能ファイルを作成します。この実行可能ファイルは再構築時に削除されます。トリックは、次のようなものでそれを再現することです

libtool --mode=execute echo ./hello

(Libtool は一時的な実行可能ファイルを再作成し、その名前を command に渡します。たとえば、出力を抑制したり、存在しないコマンドを抑制したりするために、echoの代わりに他のコマンドを使用できます。)echotrue

実行可能ファイルをリロードするには、gdbfilefilenameコマンド ファイルを使用します。実行可能な実名は、起動時に gdb によって表示されます。

$ libtool --mode=execute gdb --args ./hello
...
Reading symbols from /path/to/.libs/lt-hello...done.
(gdb)

info inferiorsgdbコマンドでも表示されます。

(gdb) info inferiors 
  Num  Description       Executable        
* 1    <null>            /path/to/.libs/lt-hello

そしてもちろん、上記のechoコマンドによって。

于 2014-06-05T19:03:22.160 に答える
0

あなたが何を尋ねているのか正確に判断するのは少し難しいですが、あなたが正しく理解できたことを願っています.

gdbはい、通常、デバッグされたコマンドが最初から開始されている限り、内部から再度実行できますgdb。実際、これは の一般的なワークフローですgdb。1 つのウィンドウ/タブ/ペインで使用してデバッグし、別のウィンドウでコードを修正し、3 番目のウィンドウで再構築します。

gdb開始する方法の 1 つは次のとおりです。

# gdb --args command arg1 arg2 ...

もう一つは:

# gdb command

後者の場合、このように gdb プロンプトからプログラムを起動するだけです。

(gdb) run arg1 arg2 ...

前者では、引数は暗示されます(そして によって記憶されますgdb)。どちらの場合でも、次を使用して事後に引数を取得できます。

(gdb) show args

バグをヒット、分析、修正したら、プログラムを再構築し、run(以前の引数を再利用する) のみを使用して再実行し、修正を検証するか、別の問題のデバッグを続行するのが一般的です。

于 2013-02-28T19:48:58.513 に答える