gdb中的多个命令由某种分隔符';'分隔?


144

我试图在gdb中一次执行两个命令:

finish; next

我尝试使用';' 分隔命令,但是gdb不允许我同时执行这两个命令。

是否可以在gdb中执行多个命令,类似于以';'分隔的bash命令 定界符?

Answers:


179

我不这么认为(但我可能错了)。您可以执行以下操作:

(gdb)定义fn
>完成
>下一个
>结束

然后输入:

(gdb)fn

您也可以将其放在~/.gdbinit文件中,以便始终可用。


1
调用gdb仅用于打印调用程序的stacktrace时的错误方法:execlp("gdb", "gdb", "-batch", "-n", "-ex", "bt full", ...而且我无法关闭分页。
六。

4
而且,如果您忘记了如何定义函数,则可以使用它show user <function name>来查看其源代码,例如show user fn
ntc2

44

如果从命令行运行gdb,则可以使用-ex参数传递多个命令,例如:

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

再加上display和其他命令,可以减少运行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

这具有有限的值/可用性IMO,因为GDB在执行命令列表后退出。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.