我对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 );
}发布于 2013-04-10 19:54:27
好的,我已经确定了原因:
1) printf()即使在fflush()之后也不能显示真实位置
2)其中一个库是用-O1编译的,但它的部分类代码位于公共内联方法中,而用-O4作为另一个库=>的一部分编译,两者显然是不兼容的,这导致了二进制流的解析出现死循环。
https://stackoverflow.com/questions/15833446
复制相似问题