Как передать аргументы скрипту gdb на python, запущенном из командной строки
Я хотел бы передать некоторые аргументы командной строки скрипту Python, запущенному через gdb
команда, но импорт модуля gdb в python удаляет атрибут argv из sys. Как мне получить доступ к arg1 и arg2 в моем скрипте python, показанном в моем примере?
Выполнение командной строки:
$ 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')
Ошибка возникла:
AttributeError: 'module' object has no attribute 'argv'
Версии:
- GNU GDB (GDB) 7,2
- Python 2.6.6
Редактировать:
Конечной целью, которую я буду отлаживать, является исполняемый файл C, который уже запущен, поэтому я присоединюсь к нему позже в сценарии, поэтому gdb -x a.py --args python -arg1 -arg2
тоже не правильно, так как python
part выводит ошибку GDB: Reading symbols from /usr/bin/python...(no debugging symbols found)...done.
...
2 ответа
-ex py
Это возможность:
argv.py:
print(arg0)
print(arg1)
Призвание:
gdb --batch -ex 'py arg0 = 12' -ex 'py arg1 = 3.4' -x argv.py
Затем вы можете обернуть это в следующий скрипт:
#!/usr/bin/env bash
doc="
Pass parameters to python script.
Usage:
$0 scrpit.py 1 2
Where scrpit.py uses the arguments like:
print(arg0)
print(arg1)
"
py="$1"
shift
cli=''
i=0
for arg in $*; do
cli="$cli -ex 'py arg$i = $arg'"
i=$(($i+1))
done
eval gdb --batch $cli -x "$py"
Мне не совсем понятно, что вы пытаетесь сделать.
Вызов формы:
gdb --args something arg arg
Говорит GDB использовать something
в качестве программы для отладки, с arg arg
в качестве начальных аргументов командной строки для run
команда. Вы можете проверить это внутри GDB с show args
,
Итак, ваша команда говорит: "Я хочу отладить python
исполняемый файл, передавая ему несколько аргументов ".
Однако позже вы говорите, что планируете attach
к некоторому уже запущенному исполняемому файлу.
Итак, я думаю, что вы, вероятно, пытаетесь сценарий GDB на Python - не отлаживать python
исполняемый файл.
Хорошая новость в том, что это возможно, но не так, как вы написали. Вместо этого у вас есть пара вариантов:
Делать
.py
файл, содержащий ваш скрипт и скажите GDBsource
это, например, сgdb -x myscript.py
(что вы уже сделали...)использование
-ex
явно вызывать Python, например-ex 'python print 23'
,