轉載:原文鏈接:https://nashnie.github.io/codingnow/?tdsourcetag=s_pctim_aiomsg
內容
如何使用 LuaStudio 斷點調試 slua-unreal ?
前言
Lua作爲腳本語言,不僅解決了C/C++ 無法解決的開發效率難題,還降低了開發的成本和風險。Lua開發的好處不用多說。
LuaStudio是大家很熟悉的編寫Lua的IDE,非常易用,我們當然也首選它來開發lua腳本。
同時我們選擇了之前開發Unity項目就已經使用的Slua方案來作爲我們的UE lua的底層。
我們要解決的是如何使用LuaStudio斷點調試slua-unreal。
開發環境
我們使用的是UE 4.20、LuaStudio v9.82 版本。
調試原理
LuaStudio 使用 hook C API 的方式來斷點。 Lua5.x debug 庫,可以把所有的 C API 中的 debug 相關 api 都導出了,包含 hook
gethook(optional thread)
Returns the current hook settings of the thread, as three values − the current hook function, the current hook mask, and the current hook count.
記錄一張斷點位置表,設置行模式的 hook ,每次進入 hook 都檢查是否是斷點處,若是就停下來等待交互調試。 但是 slua-unreal 設置思路是把 slua 作爲項目的 sdk 嵌入,以避免和項目中的其他 lua 方案衝突,所以 slua-unreal 使用帶命名空間的 c++ 方案,無法導出 c API,這就導致了 LuaStudio 無法斷點調試 slua-unreal 了。(當然我們也可以使用的log來調試)
解決辦法
slua-unreal 提供了 LuaInterface 入口,我們只要在這裏把需要的Lua API 導出就可以了。
如下
LuaInterface.h
LuaInterface.cpp
在 Lua.h 文件中可以找到所有需要導出的API(所有帶 LUA_API 標記),在 LuaInterface 中按上圖格式導出即可。
大家如果編譯不過,嘗試把namespace(slua::)加上去。
如何調試
啓動UE,選擇工程,
打開 LuaStudio 選擇,調試»»>附加到進程,附加到UE工程進程,
運行場景,打斷點,就可以了。
附加進程成功
斷點成功
變量監視,輸入變量名查看
最後感謝 LuaStudio 作者軒轅阿建、slua-unreal 作者 Siney 在這個過程中給予的幫助。
搭車推薦下我寫的一個 Unity 大地圖遮擋剔除方案插件
PotentiallyVisibleSetPlugin
For more details see
DebuggingLuaCode
lua_debugging
sluaunreal