npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

wasm-tracing-allocator

v0.1.1

Published

Downloads

21

Readme

wasm-tracing-allocator

A global allocator for Wasm that traces allocations and deallocations for debugging purposes.

Build Status

wasm-tracing-allocator enables you to better debug and analyze memory leaks and invalid frees in an environment where we don't have access to the conventional tools like Valgrind. The tracing hooks are safely implemented in JS, outside the Wasm module and its linear memory, to ensure that the tracing code doesn't perturb results.

Table of Contents

Enabling the Tracing Allocator

First, add wasm-tracing-allocator to your Cargo.toml's dependency list:

[dependencies]
wasm-tracing-allocator = "0.1.0"

Next, configure wasm_tracing_allocator::WasmTracingAllocator as the global allocator:

// src/lib.rs

use std::alloc::System;
use wasm_tracing_allocator::WasmTracingAllocator;

#[global_allocator]
static GLOBAL_ALLOCATOR: WasmTracingAllocator<System> = WasmTracingAllocator(System);

Finally, make the JS implementations of the tracing hooks are available for your Wasm module to import:

  • On the Web, add this script before your Wasm module is instantiated:

    <script src="https://unpkg.com/[email protected]/js/hooks.js"></script>
  • On Node.js, require the hooks before your Wasm module is instantiated:

    require("wasm-tracing-allocator");

Analyzing and Debugging

Use your developer tools console to invoke methods of the global WasmTracingAllocator object to get analyses about allocations and deallocations.

The output is typically rendered with console.table:

Example output

WasmTracingAllocator.dumpLiveAllocations

Dump a table of live allocations to the console.

WasmTracingAllocator.dumpLiveAllocations({
  keyLabel: String,
  valueLabel: String,
  getKey: Object => any,
  getValue: Object => Number,
});
  • keyLabel: Optional. The string label used to describe the keys column in the table.

  • valueLabel: Optional. The string label used to describe the values column in the table.

  • getKey: Optional. Function from an allocation entry object to anything. The table will group and aggregate entries by their keys. Defaults to the stack at the time of the allocation.

  • getValue: Optional. Function from an allocation entry object to a number. The values for all entries with the same key are summed. Defaults to the byte size of each allocation; a potential alternative would be to ignore the argument and return 1 to count the number of allocations instead.

WasmTracingAllocator.dumpInvalidFrees

Dump a table of invalid frees (double frees, frees of things that were never allocated, etc...) to the console.

WasmTracingAllocator.dumpInvalidFrees({
  keyLabel: String,
  valueLabel: String,
  getKey: Object => any,
  getValue: Object => Number,
});
  • keyLabel: Optional. The string label used to describe the keys column in the table.

  • valueLabel: Optional. The string label used to describe the values column in the table.

  • getKey: Optional. Function from an invalid free entry object to anything. The table will group and aggregate entries by their keys. Defaults to the stack at the time of the deallocation.

  • getValue: Optional. Function from an invalid free entry object to a number. The values for all entries with the same key are summed. Defaults to counting the number of invalid frees.