actboy168 / lua-debug

Lua Debug Adapter for Visual Studio Code
MIT License
435 stars 94 forks source link

lua51 crash #158

Closed fesily closed 2 years ago

fesily commented 2 years ago

我测试luajit的分支的时候发现一个神奇的bug ,在lua51下可以复现 image 但是把语句改为以下就OK了,我没查出来是哪里的导致的crash image

而且肯定是加载调试的问题.我去掉第一句话,他就正常了.注意:加载调用器里的lua51跑是没问题的,必须是原生没修改过的

系统:macos 12.2.1 CPU: M1 MAX

actboy168 commented 2 years ago

你可以提供一个test吗

fesily commented 2 years ago

截图就是一个完整的test代码

另外还有一个时序问题,调试器的线程迟于主线程退出,导致的内存访问异常. 随便什么版本都有. 配置需要stopOnEntry=true,在程序入口wait调试器🔗.流程如下:先连接上调试器,然后直接断开. 程序运行结束后,报bad_access_memory. 因为这个时候主线程的lua虚拟机已经在close,而调试器master线程上的lua54虚拟机还在尝试读取已经释放的内存. 这个应该是主线程没有等待调试器的线程完整关闭.对于知道这个问题的人来说,没有任何奇怪的地方,但是对于初步接触的人来说很迷惑. 我之前还以为我的程序写出BUG了,查找了很久. 或者说应该主动在lua代码里做调试器的关闭处理

fesily commented 2 years ago

能开个wiki吗,我来写点文档

actboy168 commented 2 years ago

你可以将代码直接发出来,而不是截图。

fesily commented 2 years ago
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)