【问题标题】:CodenameOne IOS app crashing due to null threadsToDeleteCodenameOne IOS 应用程序因空线程ToDelete 而崩溃
【发布时间】: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 语句中的 threadsT​​oDelete 为空。当我打开一个显示图片的新表单,然后切换回原始表单时,这似乎会发生。我确实开始了一个新线程以将某些详细信息保存到亚马逊。但它不会每次都崩溃。

【问题讨论】:

  • 上面哪一行是0?数组中的条目是 0 还是数组 threadsToDelete 本身是 0?有没有办法用一个简单的测试用例重现这个?
  • 第 3 行,if 语句,threadsT​​oDelete[i] 为空。我不知道如何用一个简单的测试用例重现抱歉。我不太了解这段代码在做什么,无法确定我的应用程序的哪个部分可能导致它。就像我说的,我为各种后台任务启动了几个线程。如果您对可能导致这种情况的原因有任何想法,我也许可以找出一个测试用例?
  • 如果threadsToDelete[i] == 0 这很好,因为这是此处测试的有效状态。如果threadsToDelete 为0,那将是一个问题。你可以从 xcode 发布堆栈跟踪吗?
  • @shaiAlmog 我对 xcode 完全陌生,我什至无法弄清楚如何获取堆栈跟踪的副本,抱歉,如果有帮助,我已经添加了一个屏幕截图?

标签: codenameone


【解决方案1】:

我已经在 Github here 中修复了这个问题。它将包含在下一次构建服务器更新中(可能是今天,也可能是下周)。

【讨论】:

  • 谢谢!感谢您的所有帮助。
猜你喜欢
  • 2013-07-16
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 2015-09-22
  • 2014-04-02
相关资源
最近更新 更多