有沒有什麼辦法可以趕上全球「Tcl解釋器錯誤」?例如,我想自動將某些文件存儲在隨後的消息中。捕獲「Tcl解釋器錯誤」
5
A
回答
5
捕獲Tcl拋出的任何類型的錯誤的核心命令是catch
。它至少需要一個參數,一個腳本來評估,並返回評估該腳本的結果代碼。發生錯誤時的結果代碼爲1
,沒有錯誤時的0
,以及其他情況下的一堆其他情況(指示其他類型的通常非錯誤異常)。 catch
還採用一個可選參數,該參數用於命名將變量寫入其中以評估腳本或錯誤消息的結果。全局變量errorInfo
將在出現錯誤時包含堆棧跟蹤(或者從8.5開始,您可以通過傳入catch
的進一步變量名稱獲取解釋器狀態字典)。
要捕獲一些腳本「foo.tcl」的錯誤,你可以使用這樣的代碼:
if {[catch {source foo.tcl} msg]} {
puts "I got an error: $msg"
puts "The stack trace was this:\n$errorInfo"
}
這是給你的工作如何,如果你想編寫出一個文件。 (我使用這種技術的外部腳本實現了一個經過仔細測試的錯誤陷阱,並加載了一個內部腳本來完成真正的工作,我發現它運行良好,或者您可以通過「抓住」腳本調用過程。 ; Tcl的應該所有錯誤捕獲的,並有其漏網之魚極少數情況)
另一條路線的錯誤可以被報告是通過bgerror
,這被稱爲處理事件過程中所發生的錯誤。處理。這是一個你可以編寫自己版本的程序;它會給出一個單一的參數時,稱那是錯誤信息,將有全球errorInfo
設置正確調用時:
proc bgerror {msg} {
global errorInfo
puts "I got an error in an event: $msg"
puts "The stack trace was this:\n$errorInfo"
}
如果沒有定義的bgerror
執行,堆棧跟蹤剛寫入stderr
頻道。如果您使用的是Tk軟件包,則會提供一個bgerror
的實現,它會彈出一個描述問題的對話框。
1
嘗試使用bgerror或interp bgerror命令。
閱讀bgerror文檔,它有一個簡單的例子。
相關問題
- 1. TCL中的擴展TCL解釋器
- 2. 可捕捉的致命錯誤解釋
- 3. if/else塊內的tcl註釋的奇怪行爲。這是tcl解釋器的錯誤嗎?
- 4. TCL XML解析錯誤
- 5. ELF解釋器錯誤
- 6. Shell解釋器錯誤
- 7. 如何刪除tcl解釋器?
- 8. 什麼是SIGUSR2用於TCL解釋器?
- 9. 選擇解釋器TCL C API
- 10. 錯誤解釋
- 11. 解釋拉解析器錯誤消息
- 12. Tcl的開關情況下的錯誤,我需要好好解釋爲錯誤
- 13. TCL,獲得完整的錯誤消息,在捕捉命令
- 14. Tcl解釋器在使用gcc編譯時未定義的引用錯誤
- 15. 捕獲錯誤
- 16. PHP捕獲一個SimpleXMLElement解析錯誤
- 17. 錯誤捕獲錯誤
- 18. 從一個解釋器中獲取tcl名稱空間的內容並傳遞給另一個解釋器
- 19. 錯誤TCL
- 20. 錯誤和解釋ERRNO錯誤和解釋
- 21. 無法解釋的鏈接器錯誤
- 22. Brainfuck解釋器錯誤行爲
- 23. std :: ignore編譯器錯誤的解釋
- 24. PHP解釋器未加載netbeans錯誤
- 25. 錯誤的python解釋器被稱爲
- 26. 配置:錯誤:Python解釋器太舊
- 27. 捕獲錯誤3
- 28. 錯誤捕獲JWT
- 29. 捕獲http錯誤
- 30. 「捕獲」的錯誤
好的建議。但它不起作用。 :(我仍然得到'Tcl解釋器錯誤:無法讀取「on1」:終端上沒有這樣的變量,但在函數中沒有。 – ilya1725 2012-03-30 23:27:53