Closed sumneko closed 3 years ago
这个问题是因为lua无法设置全局的hook,lua只会在创建coroutine时从父亲那里复制一次hook。也就是说调试器加载时已经存在的coroutine,将无法被调试器发现。
解决这个问题的办法有三个:
1.在所有的coroutine创建前,加载调试器。
2.在coroutine中调用require "debugger":attach{}
,通知调试器这个coroutine需要调试。
3.使用launch.dll中的autoattach,不过目前这个没有做封装,因为我觉得得不偿失。
仔细想了一下,检测coroutine的hook目前是调试器自己实现的,没有必要遵循lua自己的规则。所以对于threadhook,我改为了只考虑主线程的hookmask,同时设置threadhook也会设置主线程的hookmask。应该能解决这个问题。
测试了一下问题已经解决
skynet的调试也用同样方法搞定
以上测试代码,在
--@B
处断点,如果你在--@A
处让调试器附加了进程,就可以成功断点。如果将--@A
移除,使得调试器在--@C
处附加了进程,就无法断点