天天看點

XLua架構搭建——print支援檔案名和行号及日志輕按兩下重定向

xlua的代碼裡在使用的日志列印的時候會用print來進行,但是print僅僅是列印輸入的資料,而沒有對應的檔案名資訊和行号,如果檔案比較多,日志也比較多的話,就會覺得很麻煩。

lua提供了調試類debug,可以擷取堆棧等資訊,我們可以利用這個類來進行檔案名和行号的擷取,然後将檔案名和行号一起傳過去進行列印。設定一定的規範,然後利用前面的文章所講的日志重定向,在控制台輕按兩下日志的時候進行自動打開檔案和跳轉到指定行号。

首先,我們需要将原來的print函數儲存下來

local rawPrint = print;
           

然後利用debug擷取我們想要的資訊

local info = debug.getinfo(,"Sl");
           

關于getinfo的參數,大家可以查閱相關文檔,這條語句執行完後我們就可以拿到檔案名info.source和行号info.currentline了,然後我們重新組織字元串,調用我們存下來的print語句傳入我們重新組織後的字元串即可

該功能的實作會有相應的性能損耗,需要處理好相關情況,區分開發版與釋出版,以免拖慢代碼執行效率。

在剛才重新組織字元串的時候,我們自定義好規則,比如在資料之前定義格式為Lua:[檔案名:行号],這樣我們在捕獲檔案開啟時就可以比對這些字元串,然後調用自己的開啟規則。

關于日志重定向不清楚的,可以翻看以前的文章Unity控制台日志開啟重定向

看完前面的文章後,回到這邊,在GetListViewRowCount裡我們根據剛才定義的格式判斷condition.StartsWith(“LUA:”),如果是畫拆分出檔案名和行号。在OnOpenAsset裡判斷fileName.EndsWith(“.lua”),根據剛才拆分出來的檔案名和行号就可以進行跳轉了。

由于前面我們在編輯器選擇的時候使用的是Intellij idea,在實作這個功能的時候會發現好像跳轉失敗了,沒有任何效果,斷點可以發現代碼的執行是沒問題的,這意味着unity的api無法驅動Intellij idea。

如果是這樣,我們就要想另一個辦法,查閱Intellij idea的文檔,發現可以通過cmd的指令來進行開啟及跳轉,這就好辦了。

參數清單如下

//檔案資源目錄 --line 行号 檔案路徑
{0} --line {1} {2}
           

填入剛才的資料就好了。運作cmd,關于利用c#執行cmd的文章參考Unity調用外部EXE或Shell指令

QQ交流群:517539056

繼續閱讀