我在emscripten中有一个hello世界代码。我希望尽可能使用Visual Studio代码对其进行调试,并设置断点并使调试更加容易。我试图这样做,但是我无法在断点处停止。 我使用此命令在调试模式下编译代码和hello.html。
set EMCC_DEBUG=1
emcc hello.c -o hello.html
set EMCC_DEBUG=0
答案 0 :(得分:1)
简短的回答:当本地调试器在Web浏览器中运行时,您无法使用本机调试器调试C / C ++代码,您将不得不以其他方式调试代码。
长答案:
首先,set EMCC_DEBUG=1
输出有关emcc
生成的中间代码的调试信息。编译时使用-g
标志来启用调试信息:emcc -g hello.c -o hello.html
。您应该阅读的Emscripten网站has an entire page on debugging。如果您的项目可以在asm.js中运行,则应该能够使用-g4
的源映射技术,该技术应允许您使用浏览器的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进行操作,则往往会得到从成员函数到调度程序的跟踪,这通常不是超级有用)。
祝你好运!