不优化时,在每个函数开头都会把ebp入栈,这样可以方便调试时栈回溯(Stack Trace)等。push ebp的这个动作称为创建栈桢
但是llvm默认情况下,如果函数中没有alloca等栈操作,就会把栈桢动作优化掉(因为没有用到esp和ebp),这样调试时无法回溯了。
解决办法:
在创建execution engine 时
EngineBuilder&eb= EngineBuilder(m);
TargetMachine* tm=eb.selectTarget();
tm->Options.NoFramePointerElim=1;
TheExecutionEngine= eb.setErrorStr(&ErrStr).create(tm);
把NoFramePointerElim这个选项设为1,阻止优化栈桢操作
2014-09-21