在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言如果在Lua语言中某一处死循环了!你特么的怎么去查出这特么的该死的循环到底在特么的哪里!!! 重现步骤一打开技能界面,整个游戏就卡死不动了 开始排查查看一下cpu占用率,unity占用60%+,应该是死循环 一开始采取冒烟式查错法,去一些可疑的地方一个个打断点(我们有lua调试工具可断点)。 可喜的是~~ 完全没有进来! 要怎么才知道当前运行哪段代码呢?这个问题让我想起一个东西
它主要有四种事件会触发这个handler的调用:
我们可以通过debug.sethook这个函数来注册一个hook的handler,他有三个参数: handler的处理函数,hook事件触发后被调用 根据这个函数,我可以让lua每执行一行代码,就把它的文件名已经行号输出到我的日志文件中
写好这个工具后,我来到了技能界面前,开启了hook!然后打开技能界面!出现吧!死循环! 我发现我的日志文件,正在以肉眼可见的速度快速增大! 打开日志后查看后,很快就找到了一段死循环逻辑! 果然,这个害我加班的BUG, 就是我的写的! 总结debug.sethook确实可以干很多事情,比如基于这个写一个性能监听工具,在函数call、return事件触发时,计算出这个函数的执行时间。 另外这个锅其实是我们把游戏从c#语言转换到lua语言出现的。因为语法不一样,c#那边用整形除以整形得到的还是整形,但是lua会得到浮点数。 |
请发表评论