I'd like to pass some command line arguments to a python script run via gdb
command, but importing the gdb module in python removes the argv attribute from sys. How do I access arg1 and arg2 within my python script shown in my example?
Command line execution:
$ gdb -x a.py --args python -arg1 -arg2
a.py:
#!/usr/bin/env python
import gdb
import sys
print('The args are: {0}'.format(sys.argv))
gdb.execute('quit')
Error raised:
AttributeError: 'module' object has no attribute 'argv'
Versions:
- GNU gdb (GDB) 7.2
- Python 2.6.6
Edit:
The end target I'll be debugging is a C executable that is already running, so I'll be attaching to it later in the script, so gdb -x a.py --args python -arg1 -arg2
is not correct either since the python
part prints a gdb error: Reading symbols from /usr/bin/python...(no debugging symbols found)...done.
...
It's not totally clear to me what you are trying to do.
An invocation of the form:
Tells gdb to use
something
as the program to be debugged, witharg arg
as the initial command-line arguments for therun
command. You can inspect these inside gdb withshow args
.So, your command is saying "I want to debug the
python
executable, passing it some arguments".However, later you say you plan to
attach
to some already-running executable.So, I think you're probably trying to script gdb in Python -- not debug the
python
executable.The good news is, this is possible, just not the way you've written it. Instead you have a couple choices:
Make a
.py
file holding your script and tell gdb tosource
it, e.g., withgdb -x myscript.py
(which you've already done...)Use
-ex
to invoke some Python explicitly, like-ex 'python print 23'
.-ex py
This is a possibility:
argv.py:
Invocation:
Then you could wrap that in the following script: