【发布时间】:2016-07-23 01:17:36
【问题描述】:
我有一个 codenameOne 应用程序在 Android 上运行良好,但在 iOS 上偶尔会崩溃。
从 xcode 看来它失败了:
JAVA_VOID java_lang_Thread_releaseThreadNativeResources___long(CODENAME_ONE_THREAD_STATE, JAVA_LONG nativeThreadId) {
for(int i = 0 ; i < NUMBER_OF_SUPPORTED_THREADS ; i++) {
if(threadsToDelete[i] != 0 && threadsToDelete[i]->threadId == nativeThreadId) {
free(threadsToDelete[i]->blocks);
free(threadsToDelete[i]->threadObjectStack);
free(threadsToDelete[i]->callStackClass);
free(threadsToDelete[i]->callStackLine);
free(threadsToDelete[i]->callStackMethod);
free(threadsToDelete[i]->pendingHeapAllocations);
free(threadsToDelete[i]);
threadsToDelete[i] = 0;
break;
}
}
}
在 nativeMethods.m 中。它说该 if 语句中的 threadsToDelete 为空。当我打开一个显示图片的新表单,然后切换回原始表单时,这似乎会发生。我确实开始了一个新线程以将某些详细信息保存到亚马逊。但它不会每次都崩溃。
【问题讨论】:
-
上面哪一行是0?数组中的条目是 0 还是数组
threadsToDelete本身是 0?有没有办法用一个简单的测试用例重现这个? -
第 3 行,if 语句,threadsToDelete[i] 为空。我不知道如何用一个简单的测试用例重现抱歉。我不太了解这段代码在做什么,无法确定我的应用程序的哪个部分可能导致它。就像我说的,我为各种后台任务启动了几个线程。如果您对可能导致这种情况的原因有任何想法,我也许可以找出一个测试用例?
-
如果
threadsToDelete[i]== 0 这很好,因为这是此处测试的有效状态。如果threadsToDelete为0,那将是一个问题。你可以从 xcode 发布堆栈跟踪吗? -
@shaiAlmog 我对 xcode 完全陌生,我什至无法弄清楚如何获取堆栈跟踪的副本,抱歉,如果有帮助,我已经添加了一个屏幕截图?
标签: codenameone