flash — C ++ программа, скомпилированная с FlasCC с -O4 (LTO), зависает при виртуальном вызове

У меня проблема с оптимизацией LTO во FlasCC.

При компиляции с -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

Решение

Хорошо, я определил причины:

1) printf () не показывал реальное место даже после fflush ()

2) одна из библиотек была скомпилирована с -O1, но часть ее кода класса находится в общедоступном встроенном методе и была скомпилирована с -O4 как часть другой библиотеки => очевидно, эти две несовместимы, что вызвало бесконечный цикл в парсинг двоичного потока …

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]