Невозможно оценить функцию - может быть встроена
Я написал функцию, подобную этой:
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
.