llvm JIT强制保留frame pointer(栈帧)

当使用LLVM JIT时,若函数无alloca等栈操作,会默认优化掉frame pointer,导致调试时无法进行栈回溯。为解决此问题,可以在创建execution engine时设置TargetMachine的NoFramePointerElim选项为1,阻止这种优化,从而确保调试时能正确回溯。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



llvm JIT强制保留frame pointer(栈帧)

搬运自我的百度空间

    不优化时,在每个函数开头都会把ebp入栈,这样可以方便调试时栈回溯(Stack Trace)等。push ebp的这个动作称为创建栈桢

    但是llvm默认情况下,如果函数中没有alloca等栈操作,就会把栈桢动作优化掉(因为没有用到espebp),这样调试时无法回溯了。

    解决办法:

    在创建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

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值