【问题标题】:iOS JavascriptCore exception detailed stacktrace infoiOS JavascriptCore 异常详细堆栈跟踪信息
【发布时间】:2015-12-14 17:55:35
【问题描述】:

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”名称后面有一个新行,我认为那里可能有更多信息。

有类似经历的朋友可以确认一下吗?任何帮助表示赞赏。谢谢。

【问题讨论】:

  • 这些键是否记录在任何地方?你是怎么知道那些存在的?
  • 我不记得这是否记录在任何地方。我也不记得我是怎么想出来的。但是既然是一个JSValue,那么它可以是一个JS对象,也可以是任何其他的JS类型,也许我只是打印出来看看它包含什么。

标签: swift javascriptcore


【解决方案1】:

看起来它确实在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

【讨论】:

  • 你是怎么做到的?
  • 问题中提到的上述代码是我所做的。问题中没有显示太多信息是因为导致问题的方法是在全局级别,所以无论如何它没有太多堆栈。在答案中,方法在堆栈中很深,所以它现在显示了更多信息。所以我的代码实际上是有效的。
  • 这太令人兴奋了! sooo 用真正的 ST 更容易找到和解决问题
【解决方案2】:

很久以前,@igrek 询问value 中的密钥来自哪里。它们是 JavaScript 引擎抛出的 Error 对象的一部分,现在在本机错误处理程序回调中显示为 valueError 包含的具体内容取决于实现,但通常包括 messagefileNamelineNumber。似乎还支持stack。有关MDN page for Error 的更多详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2011-01-05
    • 2017-08-06
    • 2010-09-13
    相关资源
    最近更新 更多