请求openresty + mobdebug + EmmyLua远程调试在PHPStorm中的工作配置

我不知所措。我正在尝试在docker化的openresty中设置lua代码的远程调试。我使用带有EmmyLua扩展的PHPStorm和Lua端的mobdebug库。我已经阅读和听到过这个对很多人都工作,但对于我,停在断点上(或者在mobdebug.start()之后立刻停止)的工作概率大约为15%。(这证明我没有完全的配置错误),包括我实际要调试的代码中一点不起作用的代码—正好0%。

我将不会调试这个问题。我打算通过使用已知工作的确切设置来解决它,所以我需要人告诉我他们的设置:

  • 操作系统版本
  • openresty版本
  • mobdebug版本
  • 任何您可能应用的自定义补丁或hack,使调试工作
  • luasocket版本(可能相关)
  • PHPStorm版本
  • EmmyLua版本
  • docker和docker-compose版本,如果适用
  • 你可能认为相关的任何东西

我愿意完全摧毁我的开发环境并使用确切的工作规格重建它,只是为了有工作的Lua调试。

编辑:对于那些感兴趣的人,这里是我的详细症状:

  • 不能停在实际的断点上,从不(即,在我最初停止mobdebug.start()后,在弹出一个具有断点的线时它不会停在那里)

  • 我可以在init_by_lua_block中执行的代码中,在mobdebug.start()之后停止,即在每次服务器启动/配置重新加载时停止一次

  • 无法在任何在处理请求期间执行的代码中,在ssl_certificate_by_lua_blockrewrite_by_lua_block等中停止。这可能是可以理解的,因为涉及到协程

  • 我尝试在请求处理代码中启用协程调试的所有尝试都会引发错误或没有效果:

  • init_worker_by_lua_block()中的mobdebug.coro()会在mobdebug.lua中的某个地方报错,其中显示“API在当前上下文中被禁用”

  • 我想调试的函数中的mobdebug.on()要么没有效果,要么在"企图跨过C调用边界进行让步”的错误中报错。我还没有区分出模式来。

点赞
用户1442917
用户1442917

在断点处停止(或在 mobdebug.start() 后立即停止)的成功率大约为15%

在所有情况下,除非已经与相同的调试器控制器建立了连接,否则在mobdebug.start()之后停止应该都能起作用。因此,它通常不会起作用,这表明系统试图对同一个控制器/ IDE建立多个调试会话(或者根本无法建立连接)。

类似地,断点无法工作有多种原因,但如果特定设置中的文件中的断点可以正常工作,我希望它们在所有情况下都能工作。文档中列出了一些断点无法工作的原因:https://studio.zerobrane.com/doc-faq#why-breakpoints-are-not-triggered

mobdebug提供了基于命令行的控制器,因此为了故障排除,使用它可能比使用更复杂的设置更容易。

2019-08-10 04:26:04