GDB Python разрешает перегруженный метод

Как найти перегруженные методы в GDB с помощью интерфейса Python?

У меня есть класс, в котором есть несколько методов с именем «el», один из которых принимает два int. GDB останавливается в точке останова с переменной-членом с именем _Dr в области подчиненного процесса. Я делаю это, чтобы получить объект Python gdb.Value, представляющий _Dr:

(gdb) python _Dr = gdb.parse_and_eval('_Dr')

Теперь я хочу получить метод el(int,int):

(gdb) python el = _Dr['el']
Traceback (most recent call last):
  File "<string>", line 1, in <module>
gdb.error: cannot resolve overloaded method `el': no arguments supplied
Error while executing Python code.

Как сообщить ему типы аргументов для разрешения перегрузки?

Я пробовал это:

(gdb) python el = _Dr['el(int,int)']
Traceback (most recent call last):
  File "<string>", line 1, in <module>
gdb.error: There is no member or method named el(int,int).
Error while executing Python code.

и это:

(gdb) python el = _Dr['el', 'int', 'int']
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: Could not convert Python object: ('el', 'int', 'int').
Error while executing Python code.

и это:

(gdb) python el = _Dr['el(1,1)']
Traceback (most recent call last):
  File "<string>", line 1, in <module>
gdb.error: There is no member or method named el(1,1).
Error while executing Python code.

Как правильно это сделать?


person Tom    schedule 26.02.2015    source источник


Ответы (1)


Лучший способ сделать это — перебрать поля типа в поисках нужного.

Что-то вроде:

for field in _Dr.type.fields():
  if field.name == 'el':
    ... check field.type here ...

Подробнее см. узел «Типы в Python» в руководстве по gdb.

person Tom Tromey    schedule 26.02.2015
comment
Да, хотя этот метод относится к базовому классу, поэтому, думаю, мне также придется искать его по дереву наследования. - person Tom; 26.02.2015