2015-12-14 129 views
2

似乎iOS中的異常stacktrace只包含方法名稱或存在錯誤。以下是我在JSContext中處理異常的代碼。iOS Javascript核心異常詳細堆棧跟蹤信息

ontext.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」的名字之後,我覺得有可能更多的信息那裏。

任何有類似經驗的人都可以證實嗎?任何幫助表示讚賞。謝謝。

+0

這些按鍵就像'stack','line'或'column'記錄在任何地方嗎?你怎麼知道存在的? – igrek

+0

我不記得這是否記錄在任何地方。我不記得我是如何計算出來的。但由於它是一個JSValue,它可以是一個JS對象或任何其他JS類型,也許我只是打印出來看看它包含了什麼。 – Zhao

回答

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 
+0

你是怎麼做到的? – vladiulianbogdan

+0

問題中提到的上述代碼就是我所做的。它沒有在問題中顯示太多信息,因爲導致問題的方法在全球層面,所以它沒有多少堆棧。在答案中,這些方法深入堆棧,因此現在顯示更多信息。所以我的代碼實際上工作。 – Zhao