使用 visual studio 代码调试 emscripten

Debug emscripten with visual studio code

我在 emscripten 中有一个 hello world 代码。如果可能的话,我想用 visual studio 代码调试它并设置断点和调试更容易。我尝试这样做,但我无法在断点处停止。 我使用此命令在调试模式下编译我的代码和 hello.html。

set EMCC_DEBUG=1
emcc hello.c -o hello.html
set EMCC_DEBUG=0

简短回答:当 运行 在 Web 浏览器中时,您无法使用本机调试器调试代码的 C/C++ 部分,您必须在一些其他时尚。

长答案:

首先,set EMCC_DEBUG=1 输出有关 emcc 生成的中间代码的调试信息。编译时使用-g标志启用调试信息:emcc -g hello.c -o hello.html。您应该阅读的 Emscripten 网站 has an entire page on debugging。如果你的项目可以 运行 in asm.js,你应该可以使用 -g4 的 source map 技术,它应该允许你使用浏览器的 JS 调试器来调试你的代码。我当前的项目在 asm.js 下无法运行,这使得调试很有趣。

遗憾的是,当编译为 WebAssembly(默认)时,-g 并没有给你带来太多好处(据我所知),因为 JavaScript 部分正在调用 WebAssembly , 无论如何它看起来仍然是一个黑盒子。

(编辑:It seems that the latest version of browsers are improving on the wasm debugging front.

调试 wasm 代码的最简单方法是将其作为本机构建进行调试——如果问题不是 Emscripten 特有的,这将是最简单的方法。

否则,您始终可以通过 printf 调试收集您能收集到的信息。如果你使用的是普通的旧 C,或者不使用虚函数,你可能能够通过 EM_ASM(console.trace();); 获得不错的信息(如果你 are 通过 vtbl,你倾向于只是获取从成员函数到调度程序的跟踪,这通常不是很有用)。

祝你好运!