2015-02-26 3 views
0

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

У меня есть класс, который имеет несколько методов, называемых 'el', один из которых принимает два int s. 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. 

Что такое правильный способ сделать это?

ответ

0

Лучший способ сделать это - перебирать поля типа, ища тот, который вы хотите.

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

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

См узел "Типы в Python" в руководстве GDB для более подробной информации.

+0

Да, хотя метод находится в базовом классе, поэтому, я думаю, мне также придется искать вниз по дереву наследования. – Tom