如何使用 LuaStudio 斷點調試 slua-unreal ?

轉載:原文鏈接: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.h

LuaInterface.cpp
LuaInterface.cpp

在 Lua.h 文件中可以找到所有需要導出的API(所有帶 LUA_API 標記),在 LuaInterface 中按上圖格式導出即可。
大家如果編譯不過,嘗試把namespace(slua::)加上去。
Lua.h

如何調試

啓動UE,選擇工程,
打開 LuaStudio 選擇,調試»»>附加到進程,附加到UE工程進程,
運行場景,打斷點,就可以了。

附加進程成功
附加進程成功

斷點成功
斷點成功

變量監視,輸入變量名查看
變量監視

最後感謝 LuaStudio 作者軒轅阿建、slua-unreal 作者 Siney 在這個過程中給予的幫助。

搭車推薦下我寫的一個 Unity 大地圖遮擋剔除方案插件
PotentiallyVisibleSetPlugin

For more details see
DebuggingLuaCode
lua_debugging
sluaunreal

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