Вызов перегруженного оператора из GDB - PullRequest
0 голосов
/ 25 мая 2020

У меня есть пример кода, например:

class Test
{
    int var;
public:
    Test(int v_):
        var(v_)
    {}
    int operator()(int a)
    {
        return var + a;
    }
};

int main()
{
    Test t = Test(10);
    return 0;
}

Как я могу вызвать класс operator() из Test из GDB, когда я нахожусь в точке останова перед возвратом?

Команды, подобные этой, не работают:

(gdb) call (int)t.operator()((int)10)

И возвращают:

Cannot evaluate function -- may be inlined

1 Ответ

0 голосов
/ 25 мая 2020

Проблема не в том, что operator() является встроенным , а компоновщик просто удаляет функцию, поскольку нигде в вашей программе не вызывается.

На моей машине если я изменю main на:

int main()
{
    Test t = Test(10);
    t(42); // some call, result can be ignored
    return 0;
}

, то выполнение команды даст:

(gdb) call (int)t.operator()((int)10)
$1 = 20

Кроме того, при компиляции программы используйте -ggdb3 (для лучшей отладки символов) и -O0 (чтобы вызовы функций не вставлялись, и т. Д. c).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...