web-dev-qa-db-ja.com

GDBは標準出力ではなくファイルに出力します

私はgdbを実行していますが、これらの不幸な神のオブジェクトの1つを調べたいです。全体を見るには多くのページが必要です(そして、24インチモニターを横向きにしています!)使いやすさのために、gdbでオブジェクトを画面ではなくファイルに印刷して、 viと簡単に移動できます。すべてのgdbの汎用性により、これを行う方法が必要になりますか?

92

ロギングを有効にする必要があります。

(gdb) set logging on

使用するファイルを指定できます。

(gdb) set logging file my_god_object.log

また、現在のロギング構成を調べることができます。

(gdb) show logging

runコマンドを使用して、gdbからの出力をファイルにリダイレクトできることがわかりました。

(gdb) run > outfile

@qubodupの答えを拡張する

gdb core.3599 -ex bt -ex quit |& tee backtrace.log

-exスイッチはgdbコマンドを実行します。したがって、上記はコアファイルをロードし、btコマンドを実行してから、quitコマンドを実行します。出力はbacktrace.logに書き込まれ、画面にも書き込まれます。

もう1つの便利なgdb呼び出し(すべてのスレッドからのローカル変数を使用してスタックトレースを与える)は

gdb core.3599 -ex 'thread apply all bt full' -ex quit
9
user7610

https://sourceware.org/gdb/onlinedocs/gdb/Logging-Output.html から:

Gdbコマンドの出力をファイルに保存することもできます。 gdbのロギングを制御するコマンドがいくつかあります。

set logging on

ロギングを有効にします。

set logging off

ロギングを無効にします。

set logging file file

現在のログファイルの名前を変更します。デフォルトのログファイルはgdb.txtです。

set logging overwrite [on|off]

デフォルトでは、gdbはログファイルに追加します。代わりにログファイルを上書きするようにログオンを設定する場合は、上書きを設定します。

set logging redirect [on|off]

デフォルトでは、gdb出力は端末とログファイルの両方に送られます。ログファイルのみに出力する場合は、リダイレクトを設定します。

show logging

ロギング設定の現在の値を表示します。

5

出力を見ながらgdbをファイルに記録する簡単な方法(コマンドの記述を容易にする)は、teeを使用することです。

gdb command |& tee gdb.log
3
qubodup

ここには多くの良い答えがありますが、私のために働いた唯一のものを投稿する必要があります:

[niko@my-laptop]# gdb MyBinary 2>&1 log.txt

これは、gdb andバイナリ出力を同じlog.txtファイルに取得する唯一の方法であり、コンソールでも確認できます。

編集:

注意:出力は、gdb出力とバイナリ出力の間で部分的に同期されていないようです。誰か確認できますか? telnet/sshクライアントに、コンソールに表示される出力を記録する機能があるかどうかを確認することをお勧めします。

1
Niko