在复杂项目上使用 emscripten / ninja / cmake 生成调试信息

generating debug info with emscripten / ninja / cmake on complex project

我正在尝试调试一些 C 和 C++ 代码到 WASM 的端口。我研究了如何使用一个简单的 10 行 .c 程序在浏览器中进行源代码级调试,但现在我想使用一个重要的代码库来实现它。 (混合 C 和 C++)。 wasm 代码适用于一个简单的应用程序,但不适用于我更复杂的用例,因此需要对其进行调试

我使用 CMake 生成忍者构建文件

这是我在 CMakeLists.txt

中设置标志的地方
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
  -s MODULARIZE=1 \
  -s SINGLE_FILE=1 \
  -s EXPORT_NAME=aubio \
  -g --bind")

这基本上是从原始代码库复制的(-g 而不是 -Oz 是我的),我不是 CMake、忍者或 emscripten 向导。当我构建它时,我可以看到 CXX 标志没有传递给 emc++ 编译过程,只传递给 'linker' 阶段

我什至不确定对于多文件项目 'linked' 需要将 -g(可能带有源映射)放在哪里到单个文件中。它应该在 compile pass 或 link pass 上,还是两者都有。但目前我在任何地方都没有得到任何符号,没有 'map' 文件(嵌入式 DWARF?,因为浏览器插件声称支持它)

set(CMAKE_BUILD_TYPE Debug)

似乎将 DWARF 嵌入到 WASM 文件中。

我不知道为什么 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")target_compile_options(foo PUBLIC -g) 在发布版本中不起作用。