2023-04-14 lua + C动态库交叉debug

lua + C动态库交叉debug

  • 前言
  • 一、前期准备
  • 二、lldb注入进程
  • 总结


前言

lua 可以方便的使用 C 编译的 dll 库, 但是先前由于只写 C 或 lua, 较少联合调用, 不太清楚如何进行交叉 debug, 也是各种搜索, 完全没有相关信息, 只好自己摸索, 所幸不难, 窗户纸一捅就破.


一、前期准备

我是用vscode + lldb + clang 工具链编译share dll, 前期没有注意, 编译 dll 时候少了一个参数, 更准确说是参数不那么正确, 导致的低级错误.

由于编译dll时, 没有加 -g, 这个低级错误导致了根本没有断点可以执行. 改正之后发现也不对, 几经周折, 参数改为 -glldb, 专为lldb做符号的debug版本, 终于OK了.

clang -glldb -shared unicodeLua.c -o E:\Learn\unicodeLua.dll -llua -Wall 

当然这都是后话, 最先处理的是 debug 注入.

二、lldb注入进程

因为一直是单文件, 单语言开发, 没有使用过 attach 注入的方式进行 debug 所以先学习了一下这种操作, 需要在 vscode 下加一个 attach 方式的 launch 设置:

{
            "type": "lldb",
            "request": "attach",
            "name": "Attach",
            "pid": "${command:pickMyProcess}", // use ${command:pickProcess} to pick other users' processes
        }

非常简单, 没有编译选项, 只有附加需求和pid选择.

lua端可以用正常的独立文件debug, 所以无需改 launch

具体步骤, 首先启动 lua 的 debug 程序, 当在进程中发现 lua.exe 已经加载, 启动C语言的 lldb debug程序, 用attach选项, 此时会弹出选择进程对话框, 选择 lua.exe 进程, 通常它的名字会跟在很长一段vscode插件目录之后, 搜索lua就可以找到, 同时包含lua的进程可能有多个, 一定要选 lua.exe , 这才是lua解释器, 连接后所有C程序断点暂时不可用, 直至到 lua 开始引入 dll 库, 此时会自动跳到C程序的断点, 继续一步一步的debug就可以了.

另外我用的debug插件是Lua Debug actboy168, 好像并不是所有debug插件都支持交叉debug, 所以如果不行, 可以换一个插件看看.


总结

希望通过这篇文章, 帮助你解锁不同语言相互调用的交叉debug技能, 前面风雨交加, 我辈毅然任重而前行.

你可能感兴趣的:(笔记,lua,c语言,开发语言)