[img][/img]在浏览器里调试c,关键就是emcc的时候加 -g4 生成map文件
--source-map-base 指定map文件的位置
例子:
c的代码为:
int sumOfSquare(int a,int b){
int t1=a*a;
int t2=b*b;
return t1+t2;
}
普通的编译
emcc debug.c -O1 -s WASM=1 -s SIDE_MODULE=1 -o debug.wasm
SIDE_MODULE=1 是生成库文件,没有main函数的调用库
WASM=1 是生成wasm文件
最后得到debug.wasm
如果找不到sumOfSquare,尝试加EXPORTED_FUNCTIONS
emcc debug.c -O1 -s WASM=1 -s EXPORTED_FUNCTIONS=['_sumOfSquare'] -s SIDE_MODULE=1 -o debug.wasm
调用的html为
<html>
<head>
<script>
// 下面这些配置是作为wasm初始化用的,去掉某一个会报错。
const importObj = {
env: {
memory: new WebAssembly.Memory({initial: 256, maximum: 256}),
memoryBase: 0,
tableBase: 0,
table: new WebAssembly.Table({initial: 10, element: 'anyfunc'}),
abort:function(){}
}
};
// 直接使用 WebAssembly.instantiateStream的方式会报错,说是 debug.wasm 资源不是 application/wasm 格式s.
fetch('./debug.wasm').then(response =>
response.arrayBuffer()
).then(bytes => WebAssembly.instantiate(bytes,importObj)).then(results => {
instance = results.instance;
//var sumOfSquare= instance.exports._sumOfSquare; //注意这里导出的方法名前有下划线!!
var sumOfSquare= instance.exports.sumOfSquare; //注意这里导出的方法名前有下划线!!
console.log(instance.exports);
console.log(sumOfSquare);
var button = document.getElementById('run');
button.addEventListener('click', function() {
var input1 = 3;
var input2 = 4;
alert('sumOfSquare('+input1+','+input2+')='+sumOfSquare(input1,input2));
}, false);
});
</script>
</head>
<body>
<input type="button" id="run" value="click"/>
</body>
</html>
[img]
[/img]
如果要加c的debug信息就用
emcc debug.c -O1 -s WASM=1 -s SIDE_MODULE=1 -o debug.wasm -g4 --source-map-base http://121.5.59.140/mame/debug/
生成debug.wasm和 debug.wasm.map
source-map-base后面跟具体的找到map的路径
chrome的开发者工具--- sources下面就能看到c代码并且能断点调试了
如果 空行比较多久用
sed -i '/^[ ]*$/d' debug.html
去掉
分享到:
相关推荐
WebAssembly(简称WASM)是近年来在Web开发领域中出现的一种新技术,它允许开发者将用C、C++或Rust等高性能语言编写的代码运行在Web浏览器中,从而实现接近原生应用程序的性能。"wasm2015集成实验环境下载" 提供了一...
Emscripten是一个LLVM到JavaScript的编译器,能够将C和C++代码转换为可以在Web上运行的wasm。 emsdk 1.39.8是一个特定的版本,可能包含了特定的优化和修复,适合与Qt 5.15.2版本配合使用。Qt 5.15.2是Qt框架的一个...
7. **wasm2c.exe**:它将WebAssembly二进制代码转换为C语言代码,使得开发者可以在C环境中运行和调试WASM模块。 8. **wasm2wat.exe**:与wat2wasm相反,这个工具将二进制WASM模块转换为WAST格式,使得代码更易于...
WebAssembly(WASM)是一种低级的虚拟指令集,它允许开发者使用C、C++、Rust等语言编写的代码在Web浏览器上运行,提供接近原生应用的性能。Go-wasm是用Go语言实现的一个WebAssembly二进制文件解析器,它提供了处理和...
6. **调试**:虽然WASM在浏览器中的调试相对困难,但一些工具(如Chrome DevTools)提供了WASM断点和步进功能,这在分析过程中十分有用。 7. **实战经验**:通过实践,逐步熟悉WASM模块的运行流程,如何从代码中...
这个项目“wasm-excel-project”利用了Emscripten,一个C和C++到JavaScript编译器,将这些语言的代码转换成WebAssembly,从而实现浏览器中对Excel文件的操作。 1. **Emscripten**: Emscripten 是一个 LLVM 到 ...
在本例中,C/C++ DevTools Support (DWARF)的crx文件意味着这是一个为Chrome浏览器定制的开发者工具,它扩展了浏览器的内置调试功能,使得在浏览器环境下调试C/C++ WebAssembly代码更为方便。安装crx文件通常需要在...
编译脚本的示例调用: mkdir buildLLVM_ROOT=$HOME/ CFLAGS=-O2 ./compile build/main.wasm src/malloc.c src/test.c 可以使用预处理器宏MALLOC_DEBUG启用调试日志记录。 这还添加了函数print_heap() ,该函数将堆...
"wasm-playground" 是一个专为WebAssembly开发人员提供的在线工具,它提供了一个友好的环境来编写、测试和调试WASM代码。这个游乐场允许用户在不离开浏览器的情况下进行实验,大大简化了WebAssembly的学习和开发流程...
在现代Web开发中,WebAssembly(WASM)已经成为一种越来越受欢迎的技术,它允许开发者使用多种编程语言(如C、C++、Rust等)编写的代码在Web浏览器上运行。而Zephyr,作为一个基于Go语言的WASM Web框架,旨在利用Go...
这款可视化器是JavaScript实现的,它的目标是帮助开发者理解和调试WASM程序的行为,尤其是在复杂的应用场景下。 WebAssembly(简称WASM)是Web开发领域的一个重要里程碑,因为它极大地提高了Web应用的性能。与...
"Go" 这个标签表明了 proxy-wasm-sdk-go 是使用 Go 语言编写的,这意味着开发者可以利用 Go 丰富的生态系统和工具链来构建、测试和调试 WASM 插件。Go 语言以其简洁的语法、高效的性能和良好的并发支持而受到推崇,...
8. **在线编辑器和调试器**:如WebAssembly Studio(WASMBin),提供了一个便捷的在线环境来编写、测试和调试WASM代码。 9. **性能分析**:工具和指南帮助优化WASM代码,以实现最佳性能。 10. **安全**:讨论WASM...
WebAssembly(WASM)是一种低级虚拟机指令集,它被设计用来使高性能的计算可以在浏览器环境中运行...同时,掌握 WASM 也意味着能够与其他编程语言(如 C/C++、Rust、C# 等)进行更紧密的集成,实现跨平台的高性能应用。
在现代软件开发中,WebAssembly(WASM)已经成为一种重要的技术,允许开发者使用像C、C++或OCaml这样的系统级语言编写高性能的Web应用。这个项目是关于使用Python实现一个OCaml编译到WASM的字节码解释器,名为`...
它尚未完全调试。 内容 其他文件 当前状态 到 2020 年 4 月,这大致是我如何看待项目从这里开始的进展。(除非一些大的未知数咬我,它可能会!) 实现所有Elm 值类型,并使用单元测试证明它们可以工作。 在 Elm ...
9. **错误处理和调试**:在WASM环境中,调试和错误处理可能不同于传统的本地开发,需要特定的工具和技术。 10. **Nim的语法和特性**:如宏系统、模板、元编程,以及与其他语言(如C/C++)的互操作性。 这个项目...
7. **源码映射**:如果WASM模块包含了源码映射信息,开发者还可以关联到原始的C/C++源码,便于调试。 8. **命令行工具**:对于那些喜欢命令行的开发者,wasm-inspector还提供了一套命令行接口,用于非图形化的检查...
这个工具对于开发者来说具有极大的价值,因为它可以提供一种途径来理解和调试WASM模块,同时也能利用Rust的强大类型系统和内存安全特性。Rust是一种系统编程语言,强调安全、并发和性能,特别适合开发底层系统和网络...
- **调试支持**:为了方便开发者,nwasm还应该提供调试工具和信息,以便于在WASM环境中调试Nim代码。 nwasm-master这个压缩包很可能是nwasm项目的源代码仓库,其中包含了项目的源代码、文档、示例以及编译和测试的...