Android ndk-r9编译器优化问题

时间:2013-10-06 17:24:43

标签: android c++ android-ndk arm

我最近转而使用Android ndk-r9,我的应用程序遇到了一些困难,似乎与编译器优化有关。我有以下功能:

int GetTouchPos(GTouchEvents * pEvents, GPointF * pPos, int * pButton = 0)
{
    int                count    = 0;
    GTouchEvent    *    pEvent;        

    if (pEvents->GetCount(&count) == GResult_Ok)
    {
        GDebugLog((GS("GetTouchPos: count = %d"), count));

        if (pEvents->GetEvent(0, &pEvent) == GResult_Ok)
        {
            pEvent->GetTapPos(pPos);

            if (pButton)
            {
                pEvent->GetButton(pButton);
            }

            pEvent->Release();
        }
    }

    return(count);
}

如果我构建我的项目并运行它,对GDebugLog的调用会格式化并记录变量'count'的值。当我这样做时,'count'为1,我的应用程序正常工作。但是,如果我注释掉GDebugLog行(并且不做其他更改),当我运行我的应用程序时,它就不再有效了。在函数GTouchEvents :: GetCount中,我也记录它返回的内容,并且值始终正确为'1'。此外,我记录从调用到上面函数的返回(即GetTouchPos)。当存在GDebugLog行时,记录的返回值是正确的值“1”。但是当我注释掉GDebugLog调用时,记录的返回值是一个看似随机的数字,看起来像一个未初始化的变量。

请注意,当我使用r8b时,这一切都适用于没有GDebugLog行的我们。另请注意,如果我关闭优化,则无论调试行是否存在,此代码都可以使用r9完美运行。另请注意,此行为仅在编译ARM处理器时出现。我为x86构建的版本没有问题。

我在这里做了一些有问题的事情导致优化器生成错误的代码吗?

任何人都可以了解可能发生的事情吗?

感谢。

0 个答案:

没有答案