luajava的錯誤信息輸出
最近在填新坑, 打算用lua作為腳本語言, 於是選擇了luajava來跑腳本.
始終我對lua不熟, 錯誤是難免的了, 不料luajava居然沒有輸出錯誤信息orz(事實上連普通的輸出都沒找到, 反正我直接寫了個print函數…)
既然找不到輸出, 那我只好想辦法把luajava的錯誤信息轉去調用自己寫的print了, 於是我想到了或許可以像Java中的try ... catch ...
來攔住錯誤, 然後用 getStackTrace()
之類的方法找到調用棧, 最後輸出.
順着這思路, 我找到了lua的xpcall(<fun:function>, <callback:function>)
和debug.traceback([errMsg:string])
, 前者接受一個函數和一個出現錯誤時的執行回調函數, 返回執行的成功與否和錯誤信息, 後者可選地接受一個錯誤信息, 並返回錯誤信息和調用棧.
那麼剩下的就是把程式本體塞到xpcall中, 這個倒沒多少難度:
xpcall( -- $str是我傳入的程式本體 function() $str end, -- err就是錯誤信息 function(err) -- _print就是我寫的, kotlin的print函數 _print(debug.traceback(err)) end)
輸出: