lua代碼調試遇到的坑

一、未正常打印錯誤日誌

openresty啓動時,通過 init_worker_by_lua_file D:\init.lua 的方式加載文件,如果lua代碼中有錯誤,則error日誌中未打印出錯誤信息。

比如以下代碼:

1、連接一個值爲nil的變量

local a
ngx.log(ngx.WARN, "value:" .. a)
ngx.log(ngx.WARN, "Successfully print the value of a")

2、讀文件時,如果文件test.lua不存在

local f = assert(io.open("test.lua", "r"))
local data = f:read("*all")
f:close()

3、寫文件時,如果路徑 D:\\lua\\file\\ 不存在

local f = assert(io.open("D:\\lua\\file\\test.lua", "w"))
f:write(data)
f:close()

 

類似以上情況的異常,在openresty啓動的時候,都未在日誌中打印出來,但是程序已經終止執行了,在調試時需要注意下。

目前沒有好的辦法,只是在需要的地方加入了一些額外的輸出日誌,以此來判斷是否成功執行。

 

二、attempt to index global 'ngx' (a nil value)

module(...)

function test()

    ngx.log(ngx.WARN, "這是一個測試")

end

在test.lua文件中有如上代碼,執行該test函數時,報錯:attempt to index global 'ngx' (a nil value)。此時只需要在文件中加入以下代碼即可:

local ngx = ngx

module(...)改成module(...,package.seeall) 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章