我在docker容器中有openresty应用程序:
FROM openresty/openresty:xenial
RUN luarocks install luasocket
# Add additional binaries into PATH for convenience
ENV PATH=$PATH:/usr/local/openresty/luajit/bin:/usr/local/openresty/nginx/sbin:/usr/local/openresty/bin
ENV LUA_PATH="/usr/local/openresty/site/lualib/?.ljbc;/usr/local/openresty/site/lualib/?/init.ljbc;/usr/local/openresty/lualib/?.ljbc;/usr/local/openresty/lualib/?/init.ljbc;/usr/local/openresty/site/lualib/?.lua;/usr/local/openresty/site/?.lua;/usr/local/openresty/site/lualib/?/init.lua;/usr/local/openresty/site/?/init.lua;/usr/local/openresty/lualib/?.lua;/usr/local/openresty/lualib/?/init.lua;./?.lua;/usr/local/openresty/luajit/share/luajit-2.1.0-beta3/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/openresty/luajit/share/lua/5.1/?.lua;/usr/local/openresty/luajit/share/lua/5.1/?/init.lua"
ENV LUA_CPATH="/usr/local/openresty/site/lualib/?.so;/usr/local/openresty/lualib/?.so;./?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/openresty/luajit/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so;/usr/local/openresty/luajit/lib/lua/5.1/?.so"
CMD ["/usr/local/openresty/bin/openresty", "-g", "daemon off;"]
以下是nginx.conf示例:
server {
listen 80;
server_name localhost;
# disable code cache, do not need reload nginx with all changes
lua_code_cache off;
location / {
rewrite_by_lua_block {
local Core = require "core"
Core.rewrite()
}
}
}
核心lua文件源(每行都有断点):
_G.debug = require("debug")
local Core = {}
function Core:rewrite()
require("mobdebug").start("host.docker.internal")
local a = 2
ngx.say(a)
end
return Core
因此,我尝试使用EmmyLua(IDEA)+ mobdebug远程调试我的openresty应用。
调试开始后+进行了http调用:
Start mobdebug server at port:8172
Waiting for process connection...
Connected.
此后没有任何反应。 我可以看到来自openresty的响应,但是调试仍然有效,并显示消息“已连接”。
我在做什么错了?
答案 0 :(得分:0)
并且has_breakpoint_file总是记录时间。lua ...如果我放几个断点-那么所有这些断点都会记录在set_breakpoint中,但是has_breakpoint函数中没有一个记录。
我看不到您的设置有任何问题。只要执行通过该特定行并且触发了调试钩子,您就应该看到对has_breakpoint
的调用(除非您手动“逐步”执行代码)。
如果这没有发生,那么您可能要检查在协程中执行设置断点的代码,因为协程调试应该显式启用。有关详细信息,请参见this documentation section。
如果仍然不能解决问题,则可能需要在mobdebug中的print
函数中添加一些debug_hook
命令,以查看是否在具有断点的那些行上触发了它,以及之后发生了什么。
答案 1 :(得分:0)
如何使用裸露的端口运行Docker映像?您是否收到“绑定0.0.0.0:8172失败:端口已分配”?
谢谢你, 伊琳娜(Erina)
答案 2 :(得分:0)
TL; DR:请等待几年(最多)。
长版:该技术还不存在。现有的所有Lua调试器都要求您先修改代码,然后才能对其进行调试,所以1970年代我什至不能。诸如StoppingOnBreakpoints™之类的基本东西显然在不能与工作配置无穷不同的配置中不起作用。这仅仅是Lua程序员在2019年末的生活。
此外,各种Lua调试器解决方案的作者都倾向于用“它应该起作用(耸耸肩)”来答复问题报告。这不是一个好兆头。