我疯了。我正在尝试在dockerized openresty中设置lua代码的远程调试。我使用PHPStorm和EmmyLua扩展名,在Lua端使用mobdebug库。我一直在阅读和听到有关此功能对人有用的报告,但是对于我来说,在断点处停止(或在mobdebug.start()之后立即停止工作)大约有15%的时间有效(证明我是而不是完全错误地配置了该功能),包括恰好0我实际要调试的代码中这些位置的百分比。

我不会调试此问题。我打算通过使用一个已知有效的确切设置来解决该问题,因此我需要一个对其有效的人来告诉我他们的设置是什么:

  • 操作系统版本
  • openresty版本
  • mobdebug版本
  • 您可能已应用任何自定义补丁或技巧来使调试工作
  • luasocket版本(可能相关)
  • PHPStorm版本
  • EmmyLua版本
  • docker和docker-compose版本(如果适用)
  • 您可能会怀疑与
  • 相关的任何东西

    我愿意完全破坏我的开发环境,并完全按照工作规范对其进行重建,以便进行有效的Lua调试。

    编辑:对于那些感兴趣的人,这是我的详细症状:
  • 不能在实际的断点处停止(即,在我最初在mobdebug.start()之后停止,然后“恢复程序”并且命中带有断点的行之后,但它并没有在那里停止)
  • 可以在mobdebug.start()中执行从init_by_lua_block执行的代码后停止,即每个服务器启动/配置一次重新加载
  • 我在处理请求期间执行的任何代码(即mobdebug.start()ssl_certificate_by_lua_block等)中的rewrite_by_lua_block之后,无法停止,这可能是可以理解的,因为协程涉及
  • 我在请求处理代码中启用协程调试的所有尝试均出错或无效:
    mobdebug.coro()中的
  • init_worker_by_lua_block()错误与mobdebug.lua中的“当前上下文中禁用了API”
  • 我要调试的函数中的
  • mobdebug.on()无效,或者由于“试图在C调用边界上屈服”而出错。我还没有发现这种模式。
  • 最佳答案



    mobdebug.start()之后停止操作应该在所有情况下都可以工作,除非已经建立了到相同调试器 Controller 的连接,所以它通常并不指向试图在同一 Controller / IDE上建立多个调试 session 的系统(或根本无法建立连接)。

    同样,有几个原因可能导致断点不起作用,但是如果断点作为特定设置的一部分在文件中起作用,那么我希望它们在这种情况下始终可以起作用。文档中列出了断点可能不起作用的一些原因:https://studio.zerobrane.com/doc-faq#why-breakpoints-are-not-triggered

    mobdebug提供了基于命令行的 Controller ,因此出于故障排除的目的,使用它可能会更容易,而不是更复杂的设置。

    10-07 12:39