`
haoningabc
  • 浏览: 1482645 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

wasm调试c

    博客分类:
  • wasm
阅读更多
[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
去掉
分享到:
评论

相关推荐

    wasm2015集成实验环境下载

    WebAssembly(简称WASM)是近年来在Web开发领域中出现的一种新技术,它允许开发者将用C、C++或Rust等高性能语言编写的代码运行在Web浏览器中,从而实现接近原生应用程序的性能。"wasm2015集成实验环境下载" 提供了一...

    wasm+Qt5.15.2工具链.7z

    Emscripten是一个LLVM到JavaScript的编译器,能够将C和C++代码转换为可以在Web上运行的wasm。 emsdk 1.39.8是一个特定的版本,可能包含了特定的优化和修复,适合与Qt 5.15.2版本配合使用。Qt 5.15.2是Qt框架的一个...

    wasm逆向工具集 zip

    7. **wasm2c.exe**:它将WebAssembly二进制代码转换为C语言代码,使得开发者可以在C环境中运行和调试WASM模块。 8. **wasm2wat.exe**:与wat2wasm相反,这个工具将二进制WASM模块转换为WAST格式,使得代码更易于...

    Go-go-wasm用go编写的WebAssembly二进制文件解析器

    WebAssembly(WASM)是一种低级的虚拟指令集,它允许开发者使用C、C++、Rust等语言编写的代码在Web浏览器上运行,提供接近原生应用的性能。Go-wasm是用Go语言实现的一个WebAssembly二进制文件解析器,它提供了处理和...

    京麒CTF2024-Re-easy-wasm(wasm逆向分析)

    6. **调试**:虽然WASM在浏览器中的调试相对困难,但一些工具(如Chrome DevTools)提供了WASM断点和步进功能,这在分析过程中十分有用。 7. **实战经验**:通过实践,逐步熟悉WASM模块的运行流程,如何从代码中...

    C/C++ DevTools Support (DWARF)

    在本例中,C/C++ DevTools Support (DWARF)的crx文件意味着这是一个为Chrome浏览器定制的开发者工具,它扩展了浏览器的内置调试功能,使得在浏览器环境下调试C/C++ WebAssembly代码更为方便。安装crx文件通常需要在...

    wasm-malloc:用于WebAssembly的mallocfree

    编译脚本的示例调用: mkdir buildLLVM_ROOT=$HOME/ CFLAGS=-O2 ./compile build/main.wasm src/malloc.c src/test.c 可以使用预处理器宏MALLOC_DEBUG启用调试日志记录。 这还添加了函数print_heap() ,该函数将堆...

    wasm-playground:Web组装游乐场

    "wasm-playground" 是一个专为WebAssembly开发人员提供的在线工具,它提供了一个友好的环境来编写、测试和调试WASM代码。这个游乐场允许用户在不离开浏览器的情况下进行实验,大大简化了WebAssembly的学习和开发流程...

    zephyr:惯用的Go WASM Web框架

    在现代Web开发中,WebAssembly(WASM)已经成为一种越来越受欢迎的技术,它允许开发者使用多种编程语言(如C、C++、Rust等)编写的代码在Web浏览器上运行。而Zephyr,作为一个基于Go语言的WASM Web框架,旨在利用Go...

    wasm-pathfinder:WebAssembly探路者可视化器

    这款可视化器是JavaScript实现的,它的目标是帮助开发者理解和调试WASM程序的行为,尤其是在复杂的应用场景下。 WebAssembly(简称WASM)是Web开发领域的一个重要里程碑,因为它极大地提高了Web应用的性能。与...

    proxy-wasm-sdk-go:基于wasm机制,以独立于源代码的方式为mosn提供开放扩展功能

    "Go" 这个标签表明了 proxy-wasm-sdk-go 是使用 Go 语言编写的,这意味着开发者可以利用 Go 丰富的生态系统和工具链来构建、测试和调试 WASM 插件。Go 语言以其简洁的语法、高效的性能和良好的并发支持而受到推崇,...

    awesome-wasm-zh:WebAssembly(wasm)资源精选

    8. **在线编辑器和调试器**:如WebAssembly Studio(WASMBin),提供了一个便捷的在线环境来编写、测试和调试WASM代码。 9. **性能分析**:工具和指南帮助优化WASM代码,以实现最佳性能。 10. **安全**:讨论WASM...

    wasm-ops:WebAssembly指令表

    WebAssembly(WASM)是一种低级虚拟机指令集,它被设计用来使高性能的计算可以在浏览器环境中运行...同时,掌握 WASM 也意味着能够与其他编程语言(如 C/C++、Rust、C# 等)进行更紧密的集成,实现跨平台的高性能应用。

    Python-OCamlrunWebAssemblyOCamlWASM字节码解释器

    在现代软件开发中,WebAssembly(WASM)已经成为一种重要的技术,允许开发者使用像C、C++或OCaml这样的系统级语言编写高性能的Web应用。这个项目是关于使用Python实现一个OCaml编译到WASM的字节码解释器,名为`...

    elm_c_wasm:通过 C 在 Wasm 中实现 Elm

    它尚未完全调试。 内容 其他文件 当前状态 到 2020 年 4 月,这大致是我如何看待项目从这里开始的进展。(除非一些大的未知数咬我,它可能会!) 实现所有Elm 值类型,并使用单元测试证明它们可以工作。 在 Elm ...

    wasm_sdl_nim:这是使用Nim和SDL的WebAssembly示例

    9. **错误处理和调试**:在WASM环境中,调试和错误处理可能不同于传统的本地开发,需要特定的工具和技术。 10. **Nim的语法和特性**:如宏系统、模板、元编程,以及与其他语言(如C/C++)的互操作性。 这个项目...

    wasm-inspector:检查Web汇编文件的功能

    7. **源码映射**:如果WASM模块包含了源码映射信息,开发者还可以关联到原始的C/C++源码,便于调试。 8. **命令行工具**:对于那些喜欢命令行的开发者,wasm-inspector还提供了一套命令行接口,用于非图形化的检查...

    wasm-to-rust

    这个工具对于开发者来说具有极大的价值,因为它可以提供一种途径来理解和调试WASM模块,同时也能利用Rust的强大类型系统和内存安全特性。Rust是一种系统编程语言,强调安全、并发和性能,特别适合开发底层系统和网络...

    nwasm:nim的实验性wasm后端

    - **调试支持**:为了方便开发者,nwasm还应该提供调试工具和信息,以便于在WASM环境中调试Nim代码。 nwasm-master这个压缩包很可能是nwasm项目的源代码仓库,其中包含了项目的源代码、文档、示例以及编译和测试的...

    awesome-wasm-langs::smiling_face_with_sunglasses:可以直接在WebAssembly中编译或在VM中使用其VM的语言的精选列表

    - **Debugging**:Chrome DevTools、Firefox Developer Tools以及专用的WASM调试器帮助开发者调试WASM代码。 - **Runtime Environments**:如WASM VMs和Emscripten's Fastcomp LLVM backend提供运行时环境。 这个...

Global site tag (gtag.js) - Google Analytics