Closed fesily closed 2 years ago
你可以提供一个test吗
截图就是一个完整的test代码
另外还有一个时序问题,调试器的线程迟于主线程退出,导致的内存访问异常. 随便什么版本都有. 配置需要stopOnEntry=true,在程序入口wait调试器🔗.流程如下:先连接上调试器,然后直接断开. 程序运行结束后,报bad_access_memory. 因为这个时候主线程的lua虚拟机已经在close,而调试器master线程上的lua54虚拟机还在尝试读取已经释放的内存. 这个应该是主线程没有等待调试器的线程完整关闭.对于知道这个问题的人来说,没有任何奇怪的地方,但是对于初步接触的人来说很迷惑. 我之前还以为我的程序写出BUG了,查找了很久. 或者说应该主动在lua代码里做调试器的关闭处理
能开个wiki吗,我来写点文档
你可以将代码直接发出来,而不是截图。
require "luadebug" : start "@/Users/apple/func/typescripttolua_test/out/debug.sock" :event "wait"
function setup_patch()
local rawcoroutineresume = coroutine.resume
local function coreturn (...)
return ...
end
local coroutine.resume(co,...)
return rawcoroutineresume(co,...)
return coreturn(co,rawcoroutineresume(co,...))
end
end
setup_patch()
local fn = function ()
end
co = thread.create(fn)
coroutine.resume(co)
我测试luajit的分支的时候发现一个神奇的bug ,在lua51下可以复现 但是把语句改为以下就OK了,我没查出来是哪里的导致的crash
而且肯定是加载调试的问题.我去掉第一句话,他就正常了.注意:加载调用器里的lua51跑是没问题的,必须是原生没修改过的
系统:macos 12.2.1 CPU: M1 MAX