123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- --- 辅助调试代码
- --- Generated by EmmyLua(https://github.com/EmmyLua)
- --- Created by 無心道(15388152619).
- --- DateTime: 2024/10/31 19:30
- gameDebug = {}
- ---当前lua运行环境路径
- function gameDebug.getCurrentDirectory()
- local platform = package.config:sub(1, 1)
- if platform == "\\" then
- -- Windows
- local handle = io.popen("cd")
- local result = handle:read("*a")
- handle:close()
- return tostring(string.gsub(result, "\n$", ""))
- else
- -- Linux/Mac
- local handle = io.popen("pwd")
- local result = handle:read("*a")
- handle:close()
- return tostring(string.gsub(result, "\n$", ""))
- end
- end
- ---获取函数所在的文件名
- function gameDebug.get_function_file(func)
- local info = debug.getinfo(func)
- return info.source or "匿名文件"
- end
- ---获取函数的名字
- function gameDebug.get_function_name(func)
- local info = debug.getinfo(func)
- return info.name or "匿名函数"
- end
- ---获取函数所在的文件名
- function gameDebug.getFunctionInfo(func)
- local debugInfo = debug.getinfo(func)
- --获取不到函数名字,只能又文件名和行数表达了
- return (debugInfo.source or "匿名文件") .. ":" .. tostring(debugInfo.linedefined)
- end
- --- 把 table 数据转化成json字符串
- --- @param tab table 数据类型
- ---@param appendYinhao boolean 是否添加引号
- ---@param appendType boolean 是否添加类型
- function gameDebug.toTableJson(tab, appendYinhao, appendType)
- local json = ""
- for k, v in pairs(tab) do
- if not (json == nil or json == "") then
- json = json .. ", "
- end
- json = json .. gameDebug.toString(k, appendYinhao, appendType) .. ":" .. gameDebug.toString(v, appendYinhao, appendType)
- end
- local var = "{" .. json .. "}"
- return var
- end
- --- 把数组转换成字符串
- --- @param arr any 数组数据类型
- ---@param appendYinhao boolean 是否添加引号
- ---@param appendType boolean 是否添加类型
- function gameDebug.toArrayJson(arr, appendYinhao, appendType)
- local json = ""
- local success, result = pcall(function()
- for i, v in ipairs(arr) do
- if not (json == nil or json == "") then
- json = json .. ", "
- end
- local var = type(v)
- if var == "function" then
- _LUA_Error("d")
- else
- json = json .. gameDebug.toString(v, appendYinhao, appendType)
- end
- end
- end)
- --_LUA_Print(type(arr), result)
- if not success then
- --_LUA_Print("gameDebug.toArrayJson error: " .. result)
- if (json == nil or json == "") then
- if type(arr) == "userdata" then
- -- 这里可能是luaj的数组
- local len = arr.length
- local len_type = type(len)
- if len_type == "number" then
- for i = 1, len, 1 do
- if not (json == nil or json == "") then
- json = json .. ", "
- end
- json = json .. gameDebug.toString(arr[i], appendYinhao, appendType)
- end
- elseif len_type == "function" then
- json = arr:toString()
- else
- json = tostring(arr)
- end
- end
- end
- end
- local var = "[" .. json .. "]"
- return var
- end
- --- 把对象转化成字符串
- --- @param obj any 参数
- --- @param appendYinhao boolean 是否添加引号
- --- @param appendType boolean 是否添加类型
- function gameDebug.toString(obj, appendYinhao, appendType)
- if obj == nil or obj == "nil" then
- if appendType then
- return "【nil】 nil";
- end
- return "nil";
- end
- local typeString = type(obj)
- --_LUA_Print("gameDebug.toString", typeString, obj)
- if typeString == "number" or typeString == "boolean" then
- if appendType then
- return "【" .. typeString .. "】 " .. tostring(obj)
- end
- return tostring(obj)
- elseif typeString == 'string' then
- local str = tostring(obj);
- if appendYinhao then
- str = "\"" .. tostring(obj) .. "\""
- end
- if appendType then
- str = "【string】 " .. str
- end
- return str
- elseif typeString == 'cdata' then
- local str = tostring(obj)
- -- 获取字符串的长度
- local len = string.len(str)
- -- 检查字符串最后一个字符是否是目标字符
- if string.sub(str, len - 2, len) == 'ULL' then
- -- 删除最后一个字符
- str = string.sub(str, 1, len - 3)
- elseif string.sub(str, len - 1, len) == 'LL' then
- -- 删除最后一个字符
- str = string.sub(str, 1, len - 2)
- end
- if appendType then
- str = "【long】 " .. str
- end
- return str
- elseif typeString == 'table' then
- local str = gameDebug.toTableJson(obj, true, appendType)
- if appendType then
- str = "【" .. typeString .. "】 " .. str
- end
- return str
- elseif typeString == "function" then
- local s, e = pcall(function()
- return obj:toString()
- end)
- if not s then
- s, e = pcall(function()
- return obj.toString()
- end)
- end
- if not s then
- s, e = pcall(function()
- return tostring(obj)
- end)
- end
- return e
- else
- local str = gameDebug.toArrayJson(obj, true, appendType)
- if appendType then
- str = "【" .. typeString .. "】 " .. str
- end
- return str
- end
- end
- --- 把对象转化成字符串
- ---@param split string 分隔符
- --- @param ... any 参数
- function gameDebug.toStrings(split, ...)
- return gameDebug.toStrings0(false, false, split, ...)
- end
- --- 把对象转化成字符串,保护数据类型
- ---@param split string 分隔符
- --- @param ... any 参数
- function gameDebug.toStringsType(split, ...)
- return gameDebug.toStrings0(false, true, split, ...)
- end
- --- 把对象转化成字符串
- ---@param split string 分隔符
- --- @param appendYinhao boolean 是否添加引号
- --- @param appendType boolean 是否添加类型
- --- @param ... any 参数
- function gameDebug.toStrings0(appendYinhao, appendType, split, ...)
- local printString = ""
- local tmp = { ... }
- local _, _ = pcall(function()
- for i, v in pairs(tmp) do
- if not (printString == nil or printString == "") then
- printString = printString .. split
- end
- printString = printString .. gameDebug.toString(v, appendYinhao, appendType)
- end
- end)
- return printString
- end
- --- 打印参数信息, 格式化输出变量在一行内,配合过滤使用调试更方便
- function gameDebug.printLine(...)
- local string = gameDebug.toStrings(" ", ...)
- _LUA_Print(string)
- end
- --- 打印参数信息,格式化变量在多行显示
- function gameDebug.print(...)
- gameDebug.print0(false, true, false, ...)
- end
- --- 打印参数信息, 输出变量类型,格式化变量在多行显示
- function gameDebug.printType(...)
- gameDebug.print0(false, true, true, ...)
- end
- --- 打印参数信息,并且打印调用堆栈,格式化变量在多行显示
- function gameDebug.printTraceback(...)
- gameDebug.print0(true, true, false, ...)
- end
- --- 打印参数信息,并且打印调用堆栈 输出变量类型,格式化变量在多行显示
- function gameDebug.printTracebackType(...)
- gameDebug.print0(true, true, true, ...)
- end
- --- 打印参数信息,并且打印调用堆栈,格式化变量在多行显示
- --- @param isTraceback boolean 是否打印堆栈
- --- @param appendYinhao boolean 是否添加引号
- --- @param appendType boolean 是否添加类型
- --- @param ... any 参数
- function gameDebug.print0(isTraceback, appendYinhao, appendType, ...)
- local printString = ""
- local tmp = { ... }
- local success, result = pcall(function()
- for i, v in pairs(tmp) do
- if not (printString == nil or printString == "") then
- printString = printString .. ",\n"
- end
- printString = printString .. " " .. gameDebug.toString(v, appendYinhao, appendType)
- end
- end)
- printString = "===================参数======================\n" .. "[\n" .. printString .. "\n]"
- if isTraceback then
- printString = printString .. "\n===================堆栈=======================\n" .. debug.traceback("")
- end
- printString = printString .. "\n===================结束=======================\n"
- _LUA_Print(printString)
- end
- --- 辅助调试 不会抛出异常,执行异常会返回 nil
- --- @param ... any 如果调用 函数 异常后打印你需要显示的参数
- function gameDebug.debug(fun, ...)
- local s, e = xpcall(fun, debug.traceback, ...)
- if not s then
- local params = gameDebug.toStrings(" ", ...)
- error("执行异常", params, "\n", e)--把异常信息反馈java里面
- return nil
- end
- return e;
- end
- --- 断言对象为nil
- ---@param b boolean false 会抛出异常导致程序终止运行
- function gameDebug.assertTrue(b, ...)
- if not b then
- gameDebug.error(...)
- end
- end
- --- 断言 当 o1 ~= o2 会抛出异常导致程序终止运行
- ---@param o1 any
- ---@param o2 any
- function gameDebug.assertEquals(o1, o2, ...)
- gameDebug.assertTrue(o1 ~= o2, ...)
- end
- --- 断言对象为 nil 触发异常
- function gameDebug.assertNil(obj, ...)
- if obj == nil then
- gameDebug.error(...)
- end
- end
- --- 断言对象不是nil 触发异常
- function gameDebug.assertNotNil(obj, ...)
- if obj ~= nil then
- gameDebug.error(...)
- end
- end
- --- 断言 仅仅只是 print 输出
- ---@param b boolean false 仅仅只是 print 输出
- function gameDebug.assertPrint(b, ...)
- if not b then
- local msg = gameDebug.toStrings0(false, false, " ", ...)
- error(msg)--反馈的java里面
- end
- end
- --- 断言 仅仅只是 print 输出堆栈
- ---@param b boolean false 仅仅只是 print 输出
- function gameDebug.assertPrintTrace(b, ...)
- if not b then
- local msg = gameDebug.toStrings0(false, false, " ", ...)
- local traceback = debug.traceback(msg)
- error(traceback)--反馈的java里面
- end
- end
- --- 会抛出异常导致程序终止运行
- function gameDebug.error(...)
- local var = gameDebug.toStrings0(false, false, " ", ...)
- var = debug.traceback(var)
- _LUA_Error(var)
- end
|