conseils de débogage lua


titre : compétences de débogage lua
catégories :
balises Lua : [lua, débogage, compétences]
date : 14/07/2022 16:31:27
commentaires : faux
mathjax : vrai
toc : vrai

conseils de débogage lua


Préquelle

Compétences de débogage de scripts de jeu lua, pour obtenir une exécution en temps réel après la modification de scripts logiques et améliorer l'efficacité du développement


Mode éditeur côté PC

  1. Créer un nouveau script de code de test

    gDebugCustom = gDebugCustom or {
          
          }
    
    function gDebugCustom.Test01()
    	gLog("--- Test01")    
    end
    
  2. L'éditeur ajoute l'analyse à ce script et affiche le bouton

    image-20220715161734442

    1. Cliquez sur le bouton pour exécuter la méthode correspondante

      • net

        GameMgr.CallLuaFunction("Debug_ExecCustomLua", luaFile, funcName);
        
      • lua

        -- 动态执行 自定义 lua 文件调试
        function Debug_ExecCustomLua(luaFile, funcName)
            local ok = xpcall(function()
                gAssert(Utils.IsFileExist(luaFile), "--- 找不到lua 文件, path: {0}", luaFile)
                dofile(luaFile)
                gAssert(gDebugCustom, "--- 找不到全局 table: gDebugCustom")
                gAssert(type(gDebugCustom[funcName]) == "function", "--- 找不到 gDebugCustom.{0} 方法", funcName)
        
                gDebugCustom[funcName]()
            end, __G__TRACKBACK__)
            if ok then
                gLog("<color=#00ff00ff>--- gDebugCustom.{0} success!</color>", funcName)
            else
                gLog("<color=yellow>--- gDebugCustom.{0} execute fail!</color>", funcName)
            end
        end
        
        
        
        
        

terminal mobile

télécharger lua

  1. Ajouter une méthode globale au script de test [mode éditeur pc] (mode éditeur #pc) gDebugWebFnpour l'exécution Web

    
    gDebugCustom = gDebugCustom or {
          
          }
    
    function gDebugCustom.Test01()
        gLog("--- Test01")
    end
    
     -- 增加的全局方法
    gDebugWebFn = function()
        gDebugCustom.Test01()
    end
    
    
  2. Accédez au bouton de l'interface utilisateur de débogage du jeu pour exécuter un script de test de téléchargement, puis exécutezgDebugWebFn

    local function testDynamicLua()
        local url = "http://192.168.1.200:59090/lua/custom_unittest.lua"
        gTool.SafeDoString(url, function(isStop, msg)
            gLog("<color=#ffff00>--- gTool.SafeDoString, isStop: {0}</color>, msg: {1}", isStop, msg)
            gAssert(type(gDebugWebFn) == "function", "--- 找不到全局调试方法 gDebugWebFn")
            gDebugWebFn()
        end)
    end
    

Avancé
  1. Exécutez dynamiquement des scripts et téléchargez à nouveau dynamiquement d'autres scripts logiques, ce qui réécrira la méthode lua pour obtenir une logique de script d'actualisation en temps réel

    -- 避免出现在 unity editor中
    gDebugCustom.requireExt = function(luaPath, callback)
        local luaDirUrl = "http://192.168.1.200:59090/require"
        local newPath = string.gsub(luaPath, "%.", "/")
        local relaPath = string.formatExt("{0}.lua", newPath)
        local fullUrl = string.formatExt("{0}/{1}", luaDirUrl, relaPath)
        -- gLog("--- fullUrl: {0}", fullUrl)
    
        local cbWrap = function(isOk, res)
            gAssert(isOk, "--- url require fail, luaPath: {0}, fullUrl: {1}", luaPath, fullUrl)
            gLog("<color=#00ff00>--- url require success</color>, luaPath: {0}, fullUrl: {1}", luaPath, fullUrl)
            if callback then callback(res) end
        end
    
        gBestHttpMgr:GetData(fullUrl, function(isSucc, data)
            if isSucc and not IsNull(data) then
                local text = Utils.BytesToUTF8(data)
                local ok, res = xpcall(loadstring(text), __G__TRACKBACK__)
                if not ok then
                    cbWrap(false, "do remote string error")
                else
                    -- 移动端非 ab 模式, 写入本地
                    if gLogicTool.IsMobile() and not Const.LuaBundleMode then
                        local fullPath = gTool.PathJoin(Application.persistentDataPath, Const.kResluaDir, relaPath)
                        Utils.WriteFileUTF8(fullPath, text)
                    end
    
                    cbWrap(true, res)
                end
            else
                cbWrap(false, "Network error")
            end
        end)
    end
    
    function gDebugCustom.Dynamic()
        local function testGm()
            gDebugCustom.requireExt("logic.common.gm", function()
                local input = "show me the log"
                local isOk = gGmMgr:Do(input)
                gLog("--- gm ok: {0}", isOk)
            end)
        end
    	
        -- 测试
        testGm()
    end
    
    
    
    

Copie côté Android lua

À la manière du texte brut lua, vous pouvez directement copier le script lua du projet dans le répertoire du corps du package avec la commande adb, puis redémarrer le jeu ou redémarrer la machine virtuelle lua

  • commande adb

    $ adb push E:/its/rummy_itc-v4/z_tempSave/lua /sdcard/Android/data/com.aaa.bbb/files
    

Je suppose que tu aimes

Origine blog.csdn.net/yangxuan0261/article/details/125946307
conseillé
Classement