在 iOS 设备上,Lua 堆栈仅显示“?”而不显示类名或行号。

我正在调试一个在 iOS 设备上使用 Corona 制作的应用程序。我们通过 test flight 在办公室内进行测试,并给我们的测试人员提供了一些 xCode 教程,以便他们在发生错误时能够向我们提供设备日志。但现在,当他们向我们发送一个错误报告时,我们发现堆栈跟踪中没有类名称或行号 —— 因此无法确定错误来自哪里。它看起来像这样:

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>

没什么用!然而,我知道过去我在将我的应用程序直接从我的电脑加载到我的设备上时,曾经看到过更有用的堆栈跟踪 —— 而不是通过 test flight 通过互联网进行加载。有没有办法分发应用程序并仍然获得良好的堆栈跟踪?这是否与在构建 Corona 时随应用程序一起提供的 dSym 文件有关?请帮帮我,欧比旺·肯诺比,你是我唯一的希望!怎么办?

点赞
用户107090
用户107090

我不知道 Corona 如何工作,但是看起来你的脚本已经预编译并且剥离了 Lua 内部维护的调试信息。

这与 dSym 或任何外部内容无关。

2015-02-26 14:13:56
用户1150918
用户1150918

扩展 lhf 的回答,Corona在发布版构建中会剥离调试信息,并在调试版构建中保留该信息。 [1]

因此,您可能希望创建/编辑 build.settings 文件并设置如下:

settings = 
{
    build = 
    {
        neverStripDebugInfo = true
    }
}

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

更详细的信息,例如测试员如何执行这些构建,可能也会有所帮助。

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

2015-02-26 14:25:58