gdbで2つのコマンドを同時に実行しようとしています。
finish; next
「;」を使ってみました コマンドを分離するためにgdbは私に両方を一度にさせることを許可しませんでした。
「;」で区切られたbashコマンドと同様に、gdbで複数のコマンドを実行することは可能ですか?デリミタ?
gdbで2つのコマンドを同時に実行しようとしています。
finish; next
「;」を使ってみました コマンドを分離するためにgdbは私に両方を一度にさせることを許可しませんでした。
「;」で区切られたbashコマンドと同様に、gdbで複数のコマンドを実行することは可能ですか?デリミタ?
回答:
GDBにはそのようなコマンド区切り文字はありません。簡単に追加できるように少し見ましたが、残念ながらありません...
これは、のpython統合を使用して行うことができますgdb
。
s ; bt
ステップしてからバックトレースを印刷するといいでしょうが、そうではありません。
Pythonインタープリターを呼び出すことによって同じことを達成できます。
python import gdb ; print(gdb.execute("s")) ; print(gdb.execute("bt"))
これを専用のコマンド(ここでは「cmds」と呼ばれます)にラップして、Python定義でバックアップすることができます。
これ.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の値/使用性に制限があります。
execlp("gdb", "gdb", "-batch", "-n", "-ex", "bt full", ...
ページネーションをオフにできません。