我有一些ActionScript3代碼出於某種原因在編譯爲「發佈」模式時僅在堆棧溢出時崩潰。它崩潰的方法不會調用任何其他函數,因此不會以任何方式遞歸。 奇怪的是,當在'調試'模式編譯它完美的作品。 如果我在編譯器選項中啓用'詳細堆棧跟蹤','釋放'模式也開始工作。這是什麼詭計?閃存編譯器在嘗試優化太多時是否存在缺陷?發佈時堆棧溢出錯誤,但未調試。 (動作腳本)
編輯:
這裏是堆棧跟蹤:
Stacktrace:
VerifyError: Error #1023: Stack overflow occurred.
at Extensions::CRunObjectSelection/filterNonQualifierObjects()
at Extensions::CRunObjectSelection/filterObjects()
at Extensions::CRunEasing/con_IsObjectMoving()
at Extensions::CRunEasing/condition()
at Objects::CExtension/condition()
at Conditions::CCndExtension/eva2()
at Conditions::CCndExtension/eva1()
at Events::CEventProgram/computeEventList()
at RunLoop::CRun/f_GameLoop()
at RunLoop::CRun/doRunLoop()
at Application::CRunApp/loopFrame()
at Application::CRunApp/playApplication()
at Application::CRunApp/stepApplication()
這裏是一些在報告中引用的代碼:
public function selectAll(Oi:int):void
{
var pObjectInfo:CObjInfo = OiList[Oi];
pObjectInfo.oilNumOfSelected = pObjectInfo.oilNObjects;
pObjectInfo.oilListSelected = pObjectInfo.oilObject;
pObjectInfo.oilEventCount = eventProgram.rh2EventCount;
var i:int = pObjectInfo.oilObject;
while(i >= 0)
{
var pObject:CObject = ObjectList[i];
pObject.hoNextSelected = pObject.hoNumNext;
i = pObject.hoNumNext;
}
}
public function filterNonQualifierObjects(rdPtr:Object, Oi:int, negate:Boolean, filter:Function):Boolean
{
var pObjectInfo:CObjInfo = OiList[Oi];
var hasSelected:Boolean;
if (pObjectInfo.oilEventCount != eventProgram.rh2EventCount){
selectAll(Oi); //The SOL is invalid, must reset.
}
//If SOL is empty
if(pObjectInfo.oilNumOfSelected <= 0){
return false;
}
var firstSelected:int = -1;
var count:int = 0;
var current:int = pObjectInfo.oilListSelected;
var previous:CObject = null;
while(current >= 0)
{
var pObject:CObject = ObjectList[current];
var filterResult:Boolean = filter(rdPtr, pObject);
var useObject:Boolean = Boolean(int(filterResult)^int(negate));
hasSelected = Boolean(int(hasSelected) | int(useObject));
if(useObject)
{
if(firstSelected == -1){
firstSelected = current;
}
if(previous != null){
previous.hoNextSelected = current;
}
previous = pObject;
count++;
}
current = pObject.hoNextSelected;
}
if(previous != null){
previous.hoNextSelected = -1;
}
pObjectInfo.oilListSelected = firstSelected;
pObjectInfo.oilNumOfSelected = count;
return hasSelected;
}
漂亮很難說,不知道你的代碼什麼... – weltraumpirat 2012-01-07 22:08:26
這種情況出現,請分享代碼的一部分。 – Diode 2012-01-08 02:41:46
同上,但它也可能有助於發佈堆棧跟蹤或完整的錯誤消息。你正在描述一個非常普遍的情況,出現了一些錯誤。我還會介紹如何查看調試(在Flash?FB?一個網頁?)以及您如何查看該版本。 – iND 2012-01-08 06:51:03