在复杂项目上使用 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)
在发布版本中不起作用。
我正在尝试调试一些 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)
在发布版本中不起作用。