Gdbで2つのコマンドを同時に実行しようとしています。
finish; next
「;」を使用してみましたコマンドを分離しますが、gdbは一度に両方を行うことを許可しませんでした。
';'で区切られたbashコマンドと同様に、gdbで複数のコマンドを実行することは可能ですか?デリミタ?
私はそうは思わない(しかし間違っているかもしれない)。次のようなことができます:
(gdb)define fn > finish > next > end
そして次のように入力します:
(gdb)fn
これを~/.gdbinit
ファイルに配置して、常に利用できるようにすることもできます。
コマンドラインからgdbを実行している場合、次のような-exパラメーターを使用して複数のコマンドを渡すことができます。
$ gdb ./prog -ex 'b srcfile.c:90' -ex 'b somefunc' -ex 'r -p arg1 -q arg2'
これとディスプレイおよびその他のコマンドを組み合わせることで、gdbの実行が煩雑になりにくくなります。
GDBにはそのようなコマンド区切り文字はありません。簡単に追加できるように、簡単に見ましたが、残念ながらいいえ…。
これを行うには、python gdb
の統合を使用します。
_s ; bt
_がステップバックし、バックトレースを出力した場合、それは素晴らしいでしょうが、そうではありません。
Pythonインタープリターを呼び出すことにより、同じことを実現できます。
python import gdb ; print gdb.execute("s") ; print gdb.execute("bt")
これをpython定義で裏付けられた、ここでは "cmds"と呼ばれる専用コマンドにまとめることができます。
次に、複数のコマンドを実行する関数で拡張された_.gdbinit
_の例を示します。
_# multiple commands
python
from __future__ import print_function
import gdb
class Cmds(gdb.Command):
"""run multiple commands separated by ';'"""
def __init__(self):
gdb.Command.__init__(
self,
"cmds",
gdb.COMMAND_DATA,
gdb.COMPLETE_SYMBOL,
True,
)
def invoke(self, arg, from_tty):
for fragment in arg.split(';'):
# from_tty is passed in from invoke.
# These commands should be considered interactive if the command
# that invoked them is interactive.
# to_string is false. We just want to write the output of the commands, not capture it.
gdb.execute(fragment, from_tty=from_tty, to_string=False)
print()
Cmds()
end
_
呼び出し例:
_$ gdb
(gdb) cmds echo hi ; echo bye
hi
bye
_
bash HERE文書を使用してGDBで複数のコマンドを実行するために 別の方法 に遭遇しました。
例:
cat << EOF | gdb
print "command_1"
print "..."
print "command_n"
EOF
gDBはコマンドのリストを実行した後に終了するため、これにはIMOの価値/有用性が制限されています。