lua錯誤資訊和回跟蹤(Tracebacks)

2021-07-02 07:25:57 字數 1291 閱讀 9251

雖然你可以使用任何型別的值作為錯誤資訊,通常情況下,我們使用字串來描述遇到的錯誤。如果遇到內部錯誤(比如對乙個非table的值使用索引下標訪問)lua將自己產生錯誤資訊,否則lua使用傳遞給error函式的引數作為錯誤資訊。不管在什麼情況下,lua都盡可能清楚的描述問題發生的緣由。

local status, err = pcall(function () a = 'a'+1 end)

print(err)

--> stdin:1: attempt to perform arithmetic on a string value

local status, err = pcall(function () error("my error") end)

print(err)

--> stdin:1: my error

例子中錯誤資訊給出了檔名(stdin)與行號。

函式error還可以有第二個引數,表示錯誤發生的層級。比如,你寫了乙個函式用來檢查「error是否被正確呼叫」:

function foo (str)

if type(str) ~= "string"

then

error("string expected")

end

end可有人這樣呼叫此函式:

foo()

lua會指出發生錯誤的是foo而不是error,實際上,錯誤是呼叫error時產生的。為了糾正這個問題,修改前面的**讓error報告錯誤發生在第二級(你自己的函式是第一級)如下:

function foo (str)

if type(str) ~= "string"

then

error("string expected", 2)

end

end當錯誤發生的時候,我們常常希望了解詳細的資訊,而不僅是錯誤發生的位置。若能了解到「錯誤發生時的棧資訊」就好了,但pcall返回錯誤資訊時,已經釋放了儲存錯誤發生情況的棧資訊。因此,若想得到tracebacks,我們必須在pcall返回以前獲取。lua提供了xpcall來實現這個功能,xpcall接受兩個引數:呼叫函式、錯誤處理函式。當錯誤發生時,lua會在棧釋放以前呼叫錯誤處理函式,因此可以使用debug庫收集錯誤相關資訊。有兩個常用的debug處理函式:debug.debug和debug.traceback,前者給出lua的提示符,你可以自己動手察看錯誤發生時的情況;後者通過traceback建立更多的錯誤資訊,也是控制台直譯器用來構建錯誤資訊的函式。你可以在任何時候呼叫debug.traceback獲取當前執行的traceback資訊:

print(debug.traceback())

MySQL錯誤資訊

mysql的出錯 表,根據mysql的標頭檔案mysql include mysqld error.h整理而成。錯誤之處,請大家指正。1005 建立表失敗 1006 建立資料庫失敗 1007 資料庫已存在,建立資料庫失敗 1008 資料庫不存在,刪除資料庫失敗 1009 不能刪除資料庫檔案導致刪除資...

反饋錯誤資訊

即當出現錯誤 時,自動彈出我們預先設計好的反饋視窗,目的是使用者只需簡 單地按一下滑鼠就可以把反饋資訊發到你指定的信箱,當然反饋視窗的內容我們 可以任意修改設計。如下 script function errorinfo errorwin window.open width 20,height 120...

錯誤資訊介面

三 錯誤資訊介面 既然 com 是靠各種各樣的介面來提供服務的,於是很自然地就會想到,是否有乙個介面能夠提供更豐富的錯誤資訊報告那?答案是 isupporterrorinfo。下面這段 是使用 isupporterrorinfo 的一般方法 stdmethodimp c fun 上面是原理性 在我們...