clang 成功发出包含函数名称的 wasm 自定义名称部分(使用 -g 选项编译时),但是我发现没有办法发出未优化代码的参数名称和变量名称。是否有这样的选项,或者有一个开放的票证来保留此功能的进度?
更新,因为我还不能发表评论:
wasm 名称部分足够丰富来编码此信息:
https://webassembly.github.io/spec/core/appendix/custom.html?highlight=local
本地变量(参数和变量)甚至可以被 Chrome 调试器成功解析(可以通过 wat2wasm 进行测试),只是不是由 clang 发出。
最佳答案
;tldr;名称部分不够丰富,无法编码此信息。
当 clang 编译为 WebAssembly 时,源语言中的变量并不直接对应于 WebAssembly 结构,例如局部变量和全局变量(至少不是以一致的方式)。目前实现这一目标的唯一方法是通过 clang 发出的 DWARF 信息(如果您使用 emscripten 构建,则可以使用 -g3
来获取 DWARF 输出)。了解此调试信息的工具生态系统仍在增长,但 chrome 最近宣布支持使用它:https://developers.google.com/web/updates/2019/12/webassembly
关于debugging - 使用 clang 编译到 wasm 时如何保留变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65305119/