关于Lua无法调试总结。

关于Lua无法调试总结。

这个问题困扰我很久了,特此发帖。

首先我根据官网教程使用 ZeroBrane Studio 发现无法单步调试。

后面就陆陆续续换了很多工具,LuaPanda ,EmmyLua 都不行。但是 EmmyLua 有方法检查为啥不可以调试。

首先我修改 mobdebug.lua 里的两个函数 如下。

local function set_breakpoint(file, line)
  print('set_breakpoint file: '..file.." line: "..line)
  if file == '-' and lastfile then file = lastfile
  elseif iscasepreserving then file = string.lower(file) end
  if not breakpoints[line] then breakpoints[line] = {} end
  breakpoints[line][file] = true
end

local function has_breakpoint(file, line)
  print('has_breakpoint file: '..file.." line: "..line)
  return breakpoints[line]
     and breakpoints[line][iscasepreserving and string.lower(file) or file]
end

分别在 set_breakpoint 和 has_breakpoint 函数,添加了打印日志。

打印之后,发现多出红色方框内的东西。

这个时候就需要检查一下加载lua代码的chunkname参数了。 cocos2dx 修改如下

首先找到此函数:

int cocos2dx_lua_loader(lua_State *L)

如果大家还有问题可以加群找组织:

最后说一句,不管任何程序断点失效时,都应该第一时间查看 chunkname 是否合 setbreakpoint 路径是否能对的上。

使用BabeLua时,发现chunkname必须是绝对路径。所以我又加了一行代码
// Babelua插件需要绝对路径
chunkName = utils->fullPathForFilename(chunkName);

EmmyLua QQ群 529914962 (管理员很热情。)
LuaPanda QQ群:974257225 (腾讯家的产品,一直加不上。)