首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FlasCC和-O4 (LTO)编译的C++程序在虚拟调用时挂起

使用FlasCC和-O4 (LTO)编译的C++程序在虚拟调用时挂起
EN

Stack Overflow用户
提问于 2013-04-05 20:01:37
回答 1查看 252关注 0票数 0

我对FlasCC中的LTO优化有一个问题。

当用-O1编译时,生成的swf运行得很好。

但对于-O4,它一开始运行正常,然后突然在超过15秒的特定虚拟函数调用上挂起,然后Flash停止它。

我已经添加了printfs来使用Flash日志跟踪准确的挂起点。

它在printf( "Program_Step : vis init“)挂起,从未进入真正的Initialize()实现。指针声明为IGameVisualizer *m_pVisualizer;

代码:

代码语言:javascript
复制
   virtual void Program_Step( IProgramStep & step )
    {
        if ( !m_init )
        {
            if ( m_initCounter > 0 )
            {
                printf( "\n Program_Step : Later... %d skips left", m_initCounter );
                --m_initCounter;
                return;
            }

            printf( "\n Program_Step : Init" );
            m_init = true;
            m_pVisualizer = Create_SlotsVisualizer_V1();
            printf( "\n Program_Step : m_pLogic" );
            m_pLogic = Create_SlotsLogic_Test();

            if ( m_pVisualizer )
            {
                printf( "\n Program_Step : vis init" );
                m_pVisualizer->Initialize();
            }

            if ( m_pLogic )
            {
                printf( "\n Program_Step : logic init" );
                m_pLogic->Initialize( *this );
            }

            printf( "\n Program_Step : after inits" );
        }

        int dt = step.GetTimeDeltaMsec();

        ProcessControls( dt );

        if ( m_pLogic )
            m_pLogic->Process( dt, *this );

        if ( m_pVisualizer )
            m_pVisualizer->Process( dt );
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-10 19:54:27

好的,我已经确定了原因:

1) printf()即使在fflush()之后也不能显示真实位置

2)其中一个库是用-O1编译的,但它的部分类代码位于公共内联方法中,而用-O4作为另一个库=>的一部分编译,两者显然是不兼容的,这导致了二进制流的解析出现死循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15833446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档