Lua iOS 设备上的堆栈只有 ?,没有 class 名称或行号

Lua stack on iOS device only has ?, and not class names or line numbers

我正在 iOS 设备上调试用 Corona 制作的应用程序。我们已经将我们的应用程序通过办公室周围的试飞进行测试,并为我们的测试人员提供了一些 xCode 教程,以便他们可以在出现错误时向我们提供设备日志。但是现在,当他们向我们发送错误报告时,我们注意到堆栈跟踪中没有 class 名称或行号——因此无法判断错误来自何处。它看起来像这样:

Feb 26 17:39:01 Daniels-iPad ABC096-apple[3106] <Warning>: ?:0: attempt to get length of upvalue '?' (a nil value)
        stack traceback:
                ?: in function 'addBody'
                ?: in function 'createObstacle'
                ?: in function 'spawnOne'
                ?: in function 'spawn'
                ?: in function 'conditionalSpawn'
                ?: in function 'begin'
                ?: in function '?'
                ?: in function 'handleAdded'
                ?: in function 'add'
                ?: in function 'createObstacleSpawner'
                ?: in function <?:210>
                (tail call): ?
                ?: in function '?'
                ?: in function <?:148>
                ?: in function 'listener'
                ?: in function 'dispatch'
                ?: in function 'tellViews'
                ?: in function '?'
                ?: in function <?:151>

帮助不大!然而,我知道在过去,当我直接从我的计算机将我的应用程序加载到我的设备时,我看到了更多有用的堆栈跟踪——而不是通过互联网,通过试飞。有什么方法可以分发应用程序并仍然获得良好的堆栈跟踪?当我在 Corona 中构建它时,它是否与我的应用程序附带的 dSym 文件完全相关?帮助我,欧比旺斯,你是我唯一的希望!怎么办?

我不知道 Corona 是如何工作的,但您的脚本似乎已经过预编译并删除了 Lua 内部维护的调试信息。

它与 dSym 或任何外部无关。

扩展 lhf ,默认情况下,Corona 会去除分发版本中的调试信息,并将其保留在调试版本中。 [1]

所以,您可能想要 create/edit build.settings 文件并进行设置:

settings =
{
    build =
    {
        neverStripDebugInfo = true
    }
}

这将防止在任何类型的构建中剥离 debug 信息。

有关测试人员如何准确构建这些构建的额外信息也可能有所帮助。

[1] http://docs.coronalabs.com/guide/distribution/buildSettings/index.html#buildcontrol