iOS JavascriptCore 异常详细堆栈跟踪信息

iOS JavascriptCore exception detailed stacktrace info

iOS中的异常堆栈跟踪似乎只包含方法名称或存在错误。下面是我在 JSContext 中处理异常的代码。

context.exceptionHandler = { (ctx: JSContext!, value: JSValue!) in
    // type of String
    let stacktrace = value.objectForKeyedSubscript("stack").toString()
    // type of Number
    let lineNumber = value.objectForKeyedSubscript("line")
    // type of Number
    let column = value.objectForKeyedSubscript("column")
    let moreInfo = "in method \(stacktrace)Line number in file: \(lineNumber), column: \(column)"
    Logger.error("JS ERROR: \(value) \(moreInfo)")
}

我得到如下日志

ERROR : JSContextRenderer.swift:308 : setupContext : JS ERROR: Error in method clearBackground
Line number in file: 162, column: 12"

请注意,在“clearBackground”名称之后有一个新行,我认为那里可能有更多信息。

哪位有类似经历的可以证实一下吗?任何帮助表示赞赏。谢谢

看起来 stack 中确实显示了更多信息。这是我得到的日志信息之一:

JS ERROR: TypeError: undefined is not a function (evaluating 'msg.__assert__()') in method assert
syncShots
updateSync
initSync
setState
onLogicStateChanged
onLogicStateChanged
[native code]
updateMove
sendMove
shoot
onTouchUp
[native code]
_handleEvent
_dispatchEvent
. Line number in file: 183, column: 20

很久以前,@igrek 问 value 中的键是从哪里来的。它们是 JavaScript 引擎抛出的 Error 对象的一部分,现在在本机错误处理程序回调中显示为 valueError 究竟包括什么取决于实现,但通常包括 messagefileNamelineNumber。似乎 stack 也受支持。有关 MDN page for Error 的更多详细信息。