actboy168 / lua-debug

Lua Debug Adapter for Visual Studio Code
MIT License
437 stars 95 forks source link

...ons/actboy168.lua-debug-1.29.1/script/backend\worker.lua:38: Duplicate channel 'DbgWorker(userdata: 00FC6C2C)' #113

Closed xingxingtie closed 3 years ago

xingxingtie commented 3 years ago

大概五个月之前我下了lua debug插件使调试windows下的skynet程序(网址: https://github.com/dpull/skynet-mingw.git)。 一直没有问题。

最近我更新了一下新的版本,就出现了这个打印,而且程序无法继续执行下去: ...ons/actboy168.lua-debug-1.29.1/script/backend\worker.lua:38: Duplicate channel 'DbgWorker(userdata: 00FC6C2C)'

若能修复这个问题将不胜感激。

actboy168 commented 3 years ago

我试了example,没有问题

1

xingxingtie commented 3 years ago

你好,看到你的截图后,我又详细试了下。 1 更新skynet-mingw工程还有里面的skynet子工程到最新版本,并使用mingw将其变成成32位skynet.exe程序。 直接运行没有问题。 2 更新lua debug到1.29.1 3 更新vscode到1.51.1 4 将调试配置文件 写成和你的一模一样 "configurations": [ { "name": "Launch", "type": "lua", "request": "launch", "stopOnEntry": true, "runtimeExecutable": "${workspaceFolder}\skynet.exe", "runtimeArgs": ".\examples\config", "cwd": "${workspaceFolder}" } ]

现在在vscode里面调试运行必卡住,并输出: [:01000002] LAUNCH snlua bootstrap [:01000002] lua call [0 to :1000002 : 1 msgsz = 0] error : ./lualib/skynet.lua:845: ./lualib/skynet.lua:329: signal 0 stack traceback: ./lualib/skynet.lua:252: in function <./lualib/skynet.lua:251> stack traceback: [C]: in function 'assert' ./lualib/skynet.lua:845: in function 'skynet.dispatch_message'

做实验发现是这里发出了一个singnal 0. 但是不清楚为什么会发出这个错误。 图片

请问下,还有可能是哪里有问题吗?

actboy168 commented 3 years ago

看起来skynet用了lua_sethook,这可能会与调试器冲突。因为lua只允许同时存在一个hook。

当然这只是我的猜测,我没有深入去了解skynet的这个机制在干什么。

xingxingtie commented 3 years ago

你的猜想是对的,发现若使用vscode调试运行,会把一个非特制的lua_State当成特制的lua_State(在service_snlua.c中构造的)使用。 结果使用了lua_State中的ud这个非初始化的野指针。

哈哈, 云大说这个是官方的调试器。有空能帮我们研究一下不。

xingxingtie commented 3 years ago

以前这个调试器一直用都是贼好使的。看了日志才发现10月10号左右云大才加的新机制,内部使用了lua_sethook。

actboy168 commented 3 years ago

skynet使用lua_getallocf返回的ud作为自定义值使用,但是调试器注册了一个自定义内存分配器,所以skynet拿到了错误的ud。

我已经把调试器的内存分配器改成不需要ud,所以ud仍然是skynet自己的ud。虽然处理有点特别,但应该能解决这个问题。

至于lua_sethook的问题,我做了简单测试,似乎没有影响。

xingxingtie commented 3 years ago

万分感谢!!!