2 个版本
0.1.1 | 2019 年 5 月 10 日 |
---|---|
0.1.0 | 2019 年 5 月 10 日 |
#415 in 内存管理
56KB
151 行
wasm-tracing-allocator
一个用于 WebAssembly 的全局分配器,用于跟踪分配和释放以进行调试目的。
wasm-tracing-allocator
允许您在没有访问传统工具(如 Valgrind)的环境中更好地调试和分析内存泄漏和无效释放。跟踪钩子安全地在 JS 中实现,在 Wasm 模块及其线性内存之外,以确保跟踪代码不会干扰结果。
目录
启用跟踪分配器
首先,将 wasm-tracing-allocator
添加到您的 Cargo.toml
的依赖项列表中
[dependencies]
wasm-tracing-allocator = "0.1.0"
然后,将 wasm_tracing_allocator::WasmTracingAllocator
配置为全局分配器
// src/lib.rs
use std::alloc::System;
use wasm_tracing_allocator::WasmTracingAllocator;
#[global_allocator]
static GLOBAL_ALLOCATOR: WasmTracingAllocator<System> = WasmTracingAllocator(System);
最后,确保 JS 实现的跟踪钩子对您的 Wasm 模块可导入
-
在 Web 上,在实例化 Wasm 模块之前添加此脚本
<script src="https://unpkg.com/[email protected]/js/hooks.js"></script>
-
在 Node.js 上,在实例化 Wasm 模块之前要求钩子
require("wasm-tracing-allocator");
分析和调试
使用您的开发者工具控制台调用全局 WasmTracingAllocator
对象的方法以获取关于分配和释放的分析。
输出通常使用 console.table
渲染
WasmTracingAllocator.dumpLiveAllocations
将活动分配表输出到控制台。
WasmTracingAllocator.dumpLiveAllocations({
keyLabel: String,
valueLabel: String,
getKey: Object => any,
getValue: Object => Number,
});
-
keyLabel
: 可选。用于描述表中键列的字符串标签。 -
valueLabel
: 可选。用于描述表中值列的字符串标签。 -
getKey
: 可选。从分配条目对象到任何内容的函数。表将根据键对条目进行分组和聚合。默认为分配时的堆栈。 -
getValue
:可选。从分配条目对象到数字的函数。具有相同键的所有条目的值将相加。默认为每个分配的字节数;一个潜在的替代方案是忽略参数并返回1
来计数分配的数量。
WasmTracingAllocator.dumpInvalidFrees
将无效释放的表(重复释放、从未分配的项目的释放等...)输出到控制台。
WasmTracingAllocator.dumpInvalidFrees({
keyLabel: String,
valueLabel: String,
getKey: Object => any,
getValue: Object => Number,
});
-
keyLabel
: 可选。用于描述表中键列的字符串标签。 -
valueLabel
: 可选。用于描述表中值列的字符串标签。 -
getKey
:可选。从无效释放条目对象到任何内容的函数。表将根据其键对条目进行分组和汇总。默认为释放时的堆栈。 -
getValue
:可选。从无效释放条目对象到数字的函数。具有相同键的所有条目的值将相加。默认为计算无效释放的数量。
依赖项
~0.8–1.4MB
~29K SLoC