Невозможно оценить функцию - может быть встроена

Я написал функцию, подобную этой:

class abc {
    private :
    int m_var ;
    public :
    int func() { return m_var ; }
};

Когда я пытаюсь напечатать func() с помощью указателя объекта abc в gdb, он дает ошибку:

**Cannot evaluate function -- may be inlined**

Как мне печатать значения из встроенной функции?

Ответ 1

Вы получили эту ошибку, потому что вы положили определение func в тело класса, и оно достаточно мало, поэтому, во-первых, компилятор ввел эту функцию ----, что означает, что компиляция заменит все появление этого вызова функции с помощью определение, и никакое определение этой функции не будет в исполняемом файле. И, во-вторых, вы действительно не называли эту функцию в своей программе, поэтому на самом деле эта функция никогда не существует в вашем конечном исполняемом файле!

Чтобы решить это:

  • Вы можете поместить определение func вне тела класса.
  • Функция вызова в вашей программе в любом месте.

Ответ 2

Когда функция встроена, она не отображается как правильный символ в исполняемом файле, поэтому для gdb ее невозможно запустить. Простейшая вещь, вероятно, состоит в том, чтобы скомпилировать с отключенной функцией, либо с помощью -fno-inline-functions, либо (еще лучше) -O0.