问题
I am trying to execute two commands at once in gdb:
finish; next
I tried using the ';' to separate the commands but gdb did not let me do both at once.
Is it possible to do multiple commands in gdb similar to bash commands separated by ';' delimiter?
回答1:
I don't believe so (but I may be wrong). You can do something like this:
(gdb) define fn > finish > next > end
And then just type:
(gdb) fn
You can put this in your ~/.gdbinit
file as well so it is always available.
回答2:
If you are running gdb from command line you can pass multiple commands with the -ex parameter like:
$ gdb ./prog -ex 'b srcfile.c:90' -ex 'b somefunc' -ex 'r -p arg1 -q arg2'
This coupled with display and other commands makes running gdb less cumbersome.
回答3:
GDB has no such command separator character. I looked briefly, in case it would be easy to add one, but unfortunately no....
回答4:
You can do this using the python integration in gdb
.
It would be nice if s ; bt
stepped and then printed a backtrace, but it doesn't.
You can accomplish the same thing by calling into the Python interpreter.
python import gdb ; print gdb.execute("s") ; print gdb.execute("bt")
It's possible to wrap this up into a dedicated command, here called "cmds", backed by a python definition.
Here's an example .gdbinit
extended with a function to run multiple commands.
# 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
example invocation:
$ gdb
(gdb) cmds echo hi ; echo bye
hi
bye
回答5:
i ran across another way to do multiple commands in GDB using a Bash HERE document.
example:
cat << EOF | gdb
print "command_1"
print "..."
print "command_n"
EOF
this has limited value/usability IMO because GDB quits after executing the list of commands.
来源:https://stackoverflow.com/questions/1262639/multiple-commands-in-gdb-separated-by-some-sort-of-delimiter