web-dev-qa-db-ja.com

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

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

finish; next

「;」を使用してみましたコマンドを分離しますが、gdbは一度に両方を行うことを許可しませんでした。

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

131

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

(gdb)define fn 
> finish 
> next 
> end 

そして次のように入力します:

(gdb)fn 

これを~/.gdbinitファイルに配置して、常に利用できるようにすることもできます。

163
Sean Bright

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

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

これとディスプレイおよびその他のコマンドを組み合わせることで、gdbの実行が煩雑になりにくくなります。

38
alecco

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

9
Michael Snyder

これを行うには、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
_
5
Gregory Nisbet

bash HERE文書を使用してGDBで複数のコマンドを実行するために 別の方法 に遭遇しました。

例:

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

gDBはコマンドのリストを実行した後に終了するため、これにはIMOの価値/有用性が制限されています。

0