引数を使用して実行可能ファイルをデバッグするときは、次のシーケンスを実行しますprogram
。arg1 arg2
gdb
gdb
file ./program
run arg1 arg2
bt
quit
シェルスクリプトのコマンドラインで同じことをどのように実行できますか?
答え1
コマンドラインからオプションを使用してコマンドをgdbに渡すことができます-ex
。各コマンドに対してこの操作を繰り返す必要があります。これは、プログラムが標準入力をリダイレクトせずに読み取る必要がある場合に便利です。例えば、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
答え2
標準入力でコマンドを入力できます。
#!/bin/sh
exec gdb -q <<EOF
file ./program
run arg1 arg2
bt
quit
EOF
または、コマンドを入力しafile
てgdb
runを使用することもできますgdb -batch -x afile
。あるいは、クールなシェル改行(およびコーダーメンテナンス)を使用したくない場合は、すべての操作を1行で実行できます(heredocバージョンを表現する別の方法)。
gdb -q <<< "file ./program"$'\n'run$'\n'...
答え3
GDBコマンドラインからプログラムに引数を渡すにはgdb --args
。
gdb --args ./program arg1 arg2
bt