openwrt上使用emmylua + emmyluadebugger + clion调试luci

lua-emmyluadebugger

A OpenWrt package of EmmyLuaDebugger

IntelliJ-EmmyLua是一个给JetBrains全家桶用的lua插件,也有VSCode版本VSCode-EmmyLua插件。

EmmyLuaDebugger是配合IntelliJ-EmmyLua使用的remote debugger, C++编写供lua调用的动态库(emmy_core.so),相比于我以前使用的mobdebug具有更高的性能。

lua-emmyluadebugger是EmmyLuaDebugger的OpenWrt包,host cmake最低版本需要3.15(使用openwrt v19.07的即可),不然要修改EmmyLuaDebugger的CMakeLists.txt。

  • 使用方法(基于clion)

    • 安装Emmylua插件

    • 使用clion的deployment将openwrt根文件系统拉到开发机器上(openwrt的根文件系统编译好tftp,手动rsync也行)

    • clion添加一个配置:Run >> Edit Configuration >> + ,选择Emmy Debugger,然后配置参数,IDE这端作为Server所以connection选择Debugger connect IDE,配好本机ip和监听端口。

    • 拷贝clion上自动生成的lua代码到lua的入口文件/www/cgi-bin/luci的第一行

    -- openwrt上这句可以不要,因为库已经被安装到了/usr/lib/lua,在openwrt上这个已属于package.cpath了
    -- package.cpath = package.cpath .. ';/home/a/.local/share/JetBrains/CLion2023.3/EmmyLua/debugger/emmy/linux/?.so'
    local dbg = require('emmy_core')
    dbg.tcpConnect('192.168.3.3', 9966)
    
    • 下一个断点,进入luci的web,好了,debug吧。

  • 调试luci遇到的问题

    • 下断点停得超过60s,你的网页会报Bad Gateway,这个是uhttpd的配置绝对,修改/etc/config/uhttpd,改为:uhttpd.main.script_timeout='0',即永不超时,重启uhttpd服务
    • 如果htm中插入了Lua语句,修改后可能不生效,修改luci.ccache.enable='0'.
posted @ 2024-03-20 19:46  thammer  阅读(128)  评论(0编辑  收藏  举报