0

我对 FlasCC 中的 LTO 优化有疑问。

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

但是使用 -O4 它首先运行正常,但随后突然挂起特定的虚拟函数调用超过 15 秒,然后 Flash 将其停止。

我添加了 printfs 以使用 Flash 日志跟踪确切的挂起点。

它挂在 printf("Program_Step : vis init") 永远不会进入真正的 Initialize() 实现。指针被声明为 IGameVisualizer *m_pVisualizer;

代码:

   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 );
    }
4

1 回答 1

0

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

1) 即使在 fflush() 之后 printf() 也没有显示真实的位置

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

于 2013-04-10T11:54:27.413 回答