# 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
8条答案
按热度按时间svujldwt1#
我不这么认为(但我可能错了)。你可以这样做:
然后键入:
你也可以把它放在你的
~/.gdbinit
文件中,这样它就总是可用的。z18hc3ub2#
如果您从命令行运行gdb,则可以使用-ex参数传递多个命令,如下所示:
这与display和其他命令结合使用,使得运行gdb变得不那么麻烦。
jtw3ybtb3#
您可以使用
gdb
中的python集成来实现这一点。如果
s ; bt
步进然后打印回溯,这将是很好的,但它没有。您可以通过调用Python解释器来完成同样的任务。
python import gdb ; print(gdb.execute("s")) ; print(gdb.execute("bt"))
可以将其封装到一个专用命令中,这里称为"cmds",由python定义支持。
下面是一个
.gdbinit
示例,它扩展了一个函数以运行多个命令。示例调用:
5lhxktic4#
GDB没有这样的命令分隔符。我简单地看了一下,以防添加一个会很容易,但不幸的是没有...。
w41d8nur5#
当然这是可能的。例如,给定C代码
,假设我们想问GDB每个变量的类型是什么。下面的GDB命令序列将允许我们在一行中输入3个
whatis
请求:set prompt #gdb#
#
的任何提示符都可以使用:恰好#
在GDB命令脚本中启动了一个注解。set logging overwrite on
set logging redirect on
set logging on
gdb.txt
。printf "\nwhatis a\nwhatis b\nwhatis c\n"
whatis
请求,在一行中输入正如所承诺的!将命令分开,在第一个命令之前,在最后一个命令之后是\n
。set logging off
个gdb.txt
;该文件现在包含一个有效的GDB命令脚本:source gdb.txt
备注
shell
生成命令脚本将不那么麻烦,并且很可能是可能的;然而,上述方法是平台不可知。wribegjk6#
我遇到了another way,使用Bash HERE文档在GDB中执行多个命令。
例如:
由于GDB在执行完命令列表后退出,因此这在IMO中的价值/可用性有限。
pengsaosao7#
此link描述了gdb“用户定义的命令”,并包含上述解决方案。
uplii1fm8#
我过去只是将txt文件中多行的多个命令复制并粘贴到gdb命令行,在gdb 8.3中运行良好。但gdb 12.1只是将包括行更改在内的整个块解释为一个命令,并失败。