napi-rs 怎么调试,调试 .node cpp/rust 模块,vscode调试napi-rs
背景
出于需要,开发中碰到后端渲染的 svg 和 chrome 渲染出来的结果在字体上有出入,随深入查看源码分析 + debugger
于是乎,希望在 js 执行这个文件 renderAsync
时候,里面会去调用 napi-rs 生成的 .node
文件,希望能够断点进去,走到 tree.convert_text
这个函数
并且能 step in 进去,走到他的依赖 fontlib (通过静态代码分析知道),最终会走到 find_best_match,遵循 W3C Matching font styles 规范
但是由于具体匹配结果和浏览器 skia 匹配结果不太一致,于是希望断点调试这一块的过程
注意:Mac 和 Window 调试过程略有区别,这里仅展示 Mac 版本
准备
- vscode 安装
vadimcn.vscode-lldb
(扩展 ID) CodeLLDB - 设置打开
debug.allowBreakpointsEverywhere
- 添加
launch.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Launch",
"program": "/Users/admin/.nvm/versions/node/v20.14.0/bin/node",
"args": ["/Users/admin/workspace/resvg-js/example/async.js"],
"cwd": "${workspaceFolder}"
}
]
}
运行和调试
第一步是设置断点。现在回到文件资源管理器,打开要设置断点的 rust 文件。
第二步,shift + cmd + d
回到 debug 面板,点击 开始调试 (F5)
命中断点,enjoy