【发布时间】:2016-10-31 17:08:45
【问题描述】:
使用 llvm 和 lldb 在 OSX 上工作,我有以下代码:
#include <stdio.h>
class A{
public:
void f() __attribute__((noinline))
{
printf("f()\n");
}
void g() __attribute__((noinline))
{
printf("g()\n");
}
};
int main()
{
A a;
a.g();
return 0;
}
当进入 main() 并尝试从调试器调用 p a.f() 时,我得到:
错误:无法查找符号:__ZN1A1fEv
但是,调用 p g.f() 效果很好。
我知道 f() 可能会被优化掉,但是有什么方法可以禁用这种优化,所以我可以在调试器中使用它吗?
谢谢!
【问题讨论】:
-
尝试在某处添加符号,例如,
main()中的f;(不是f();)。 -
检查您的编译器命令行优化开关或 IDE 编译器设置。几乎所有现有的编译器都允许禁用优化。
-
作为一个快速hack,你可以尝试制作
virtual的方法。 -
@lorro - 你能解释一下语法吗?
-
@maxik 非虚成员函数不会影响对象的大小