我在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 );
}
答案 0 :(得分:0)
好的,我已经确定了原因:
1)即使在fflush()
之后,printf()也没有显示真实的位置2)其中一个库使用-O1编译,但其部分类代码位于公共内联方法中,并使用-O4作为另一个库的一部分进行编译=>显然那两个不兼容,这导致解析二进制流的无限循环......