應用程式中的錯誤處理

2021-07-11 04:34:47 字數 938 閱讀 8699

典型的情況是應用的**執行在非保護模式下。由於應用的**不是被lua

呼叫的,

lua根據上下文情況來捕捉錯誤的發生(也就是說,

lua不能呼叫

setjmp

)。在這些情況下,當

lua遇到像

"not enough memory"

的錯誤,他不知道如何處理。他只能呼叫乙個

panic

函式退出應用。(你可以使用

lua_atpanic

函式設定你自己的

panic

函式)

不是所有的api

函式都會丟擲異常,

lua_open

、lua_close

、lua_pcall

和lua_load

都是安全的,另外,大多數其他函式只能在記憶體分配失敗的情況下丟擲異常:比如,

lual_loadfile

如果沒有足夠記憶體來拷貝指定的檔案將會失敗。有些程式當碰到記憶體不足時,他們可能需要忽略異常不做任何處理。對這些程式而言,如果

lua導致記憶體不足,

panic

是沒有問題的。

如果你不想你的應用退出,即使在記憶體分配失敗的情況下,你必須在保護模式下執行你的**。大部分或者所有你的lua

**通過呼叫

lua_pcall

來執行,所以,它執行在保護模式下。即使在記憶體分配失敗的情況下,

lua_pcall

也返回乙個錯誤**,使得

lua直譯器處於和諧的(

consistent

)狀態。如果你也想保護所有你的與

lua互動的

c**,你可以使用

lua_cpcall

。(請看參考手冊,有對這個函式更深的描述,在

lua的發布版的

lua.c

檔案中有它應用的例子)

MySql錯誤處理 錯誤處理的例子

有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...

swift 中錯誤處理

enum customerror error 定義乙個測試用的類 class testerrorclass name s func showstring 第一種使用方式,執行 後,直接丟擲異常,中止執行 let tes trytesterrorclass s 執行結果 lldb expr 123.c...

SPEL 中的錯誤處理

spel 中的錯誤處理 專案 目的 onerr 使用onerr語句定義錯誤處理例程的位置。err 使用err檢索當前錯誤狀態的數量。在錯誤處理例程中使用這個可以確定已經發生了哪些錯誤。error 生成乙個可被錯誤處理程式捕獲的使用者定義的錯誤。era 使用era檢索發生錯誤的軸號。這通常用於錯誤處理...