Как передать аргументы скрипту 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 файл, содержащий ваш скрипт и скажите GDB source это, например, с gdb -x myscript.py (что вы уже сделали...)

  • использование -ex явно вызывать Python, например -ex 'python print 23',

Другие вопросы по тегам