GithubHelp home page GithubHelp logo

robert-steiner / wasm-tracing-allocator Goto Github PK

View Code? Open in Web Editor NEW

This project forked from rustwasm/wasm-tracing-allocator

0.0 1.0 0.0 61 KB

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

Home Page: https://docs.rs/wasm-tracing-allocator

License: Apache License 2.0

JavaScript 26.70% Rust 73.30%

wasm-tracing-allocator's Introduction

wasm-tracing-allocator

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

Crates.io version Download docs.rs docs

Built with ๐Ÿฆ€๐Ÿ•ธ by The Rust and WebAssembly Working Group

About

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.

wasm-tracing-allocator's People

Contributors

alexcrichton avatar fitzgen avatar pablosichert avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.