web-dev-qa-db-ja.com

1つのコマンドでのgdb

実行可能ファイルprogramを引数付きでデバッグするときarg1 arg2gdb付きでデバッグするとき、次のシーケンスを実行します

gdb
file ./program
run arg1 arg2
bt
quit

シェルスクリプトの1つのコマンドラインから同じようにするにはどうすればよいですか?

6
Viesturs

オプション-exを使用して、コマンドラインでgdbにコマンドを渡すことができます。コマンドごとにこれを繰り返す必要があります。これは、プログラムがstdinを読み取る必要があるため、リダイレクトしたくない場合に役立ちます。たとえば、od -c

echo abc |
gdb -ex 'break main' -ex 'run -c' -ex bt -ex cont -ex quit  od

したがって、特にあなたの質問には、次のように使用できます。

gdb -ex 'run arg1 arg2' -ex bt -ex quit ./program
11
meuh

コマンドは標準入力に入力できます。

#!/bin/sh
exec gdb -q <<EOF
file ./program
run arg1 arg2
bt
quit
EOF

または、コマンドをafileおよびgdb run with gdb -batch -x afileに配置するか、または改行(およびメンテナンスコーダー)がファンシーなシェルで嫌いな場合は、すべてを単一行(ヒアドキュメントバージョンを表す別の方法):

gdb -q <<< "file ./program"$'\n'run$'\n'...
5
thrig