ある種の区切り文字「;」で区切られたgdbの複数のコマンド?


144

gdbで2つのコマンドを同時に実行しようとしています。

finish; next

「;」を使ってみました コマンドを分離するためにgdbは私に両方を一度にさせることを許可しませんでした。

「;」で区切られたbashコマンドと同様に、gdbで複数のコマンドを実行することは可能ですか?デリミタ?

回答:


179

私はそうは思わない(しかし私は間違っているかもしれない)。あなたはこのようなことをすることができます:

(gdb)fnを定義する
>仕上げ
>次へ
>終了

次に、次のように入力します。

(gdb)fn

これを~/.gdbinitファイルに入れることもできるので、いつでも利用できます。


1
呼び出し元のスタックトレースを出力するだけのためにgdbが呼び出されたときの悪い方法:execlp("gdb", "gdb", "-batch", "-n", "-ex", "bt full", ...ページネーションをオフにできません。
Vi。

4
また、関数の定義方法を忘れた場合は、を使用show user <function name>してそのソースを表示できますshow user fn
ntc2 16

44

コマンドラインからgdbを実行している場合は、次のように-exパラメータを指定して複数のコマンドを渡すことができます。

$ gdb ./prog -ex 'b srcfile.c:90' -ex 'b somefunc' -ex 'r -p arg1 -q arg2'

これを表示や他のコマンドと組み合わせることで、gdbの実行がより面倒になります。


10

GDBにはそのようなコマンド区切り文字はありません。簡単に追加できるように少し見ましたが、残念ながらありません...


5

これは、の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

クリップボードからコマンドを貼り付けて実行できるため、見事です。
ジャン=フランソワ・ファーブル

0

Bash HEREドキュメントを使用してGDBで複数のコマンドを実行する別の方法に遭遇しました。

例:

cat << EOF | gdb
print "command_1"
print "..."
print "command_n"
EOF

コマンドのリストを実行した後にGDBが終了するため、これはIMOの値/使用性に制限があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.