{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,26]],"date-time":"2026-04-26T05:54:14Z","timestamp":1777182854731,"version":"3.51.4"},"reference-count":62,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA2","license":[{"start":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T00:00:00Z","timestamp":1759968000000},"content-version":"vor","delay-in-days":0,"URL":"http:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/100000001","name":"NSF","doi-asserted-by":"publisher","award":["2148301"],"award-info":[{"award-number":["2148301"]}],"id":[{"id":"10.13039\/100000001","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2025,10,9]]},"abstract":"<jats:p>\n                    Debugging and monitoring programs are integral to engineering and deploying software. Dynamic analyses monitor applications through source code or IR injection, machine code or bytecode rewriting, virtual machine APIs, or direct hardware support. While these techniques are viable within their respective domains, common tooling across techniques is rare, leading to fragmentation of skills, duplicated efforts, and inconsistent feature support. We address this problem in the WebAssembly ecosystem with Whamm, an instrumentation framework for Wasm that uses engine-level probing and has a bytecode rewriting fallback to promote portability. Whamm solves three problems: 1) tooling fragmentation, 2) prohibitive instrumentation overhead of general-purpose frameworks, and 3) tedium of tailoring low-level high-performance mechanisms. Whamm provides fully-programmable instrumentation with declarative match rules, static and dynamic predication, automatic state reporting, and user library support, achieving high performance through compiler and engine optimizations. The Whamm engine API allows instrumentation to be provided to a Wasm engine as Wasm code, reusing existing engine optimizations and unlocking new ones, most notably\n                    <jats:italic toggle=\"yes\">intrinsification<\/jats:italic>\n                    , to minimize overhead. A key insight of our work is that explicitly requesting program state in match rules, rather than reflection, enables the engine to efficiently bundle arguments and even\n                    <jats:italic toggle=\"yes\">inline<\/jats:italic>\n                    compiled probe logic. Whamm streamlines the tooling effort, as its bytecode-rewriting target can run instrumented programs everywhere, lowering fragmentation and advancing the state of the art for engine support. We evaluate Whamm with case studies of non-trivial monitors and show it is expressive, powerful, and efficient.\n                  <\/jats:p>","DOI":"10.1145\/3763124","type":"journal-article","created":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T08:49:50Z","timestamp":1759999790000},"page":"2058-2086","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":1,"title":["Debugging WebAssembly? Put Some Whamm on It!"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0009-0005-7242-6179","authenticated-orcid":false,"given":"Elizabeth","family":"Gilbert","sequence":"first","affiliation":[{"name":"Carnegie Mellon University, Pittsburgh, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0009-0009-4266-7210","authenticated-orcid":false,"given":"Matthew","family":"Schneider","sequence":"additional","affiliation":[{"name":"Carnegie Mellon University, Pittsburgh, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0009-0004-2557-6230","authenticated-orcid":false,"given":"Zixi","family":"An","sequence":"additional","affiliation":[{"name":"Carnegie Mellon University, Pittsburgh, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0009-0003-5631-2767","authenticated-orcid":false,"given":"Suhas","family":"Thalanki","sequence":"additional","affiliation":[{"name":"Carnegie Mellon University, Pittsburgh, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0009-0000-9228-591X","authenticated-orcid":false,"given":"Wavid","family":"Bowman","sequence":"additional","affiliation":[{"name":"University of Florida, Gainesville, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0009-0009-7458-7864","authenticated-orcid":false,"given":"Alexander Y.","family":"Bai","sequence":"additional","affiliation":[{"name":"New York University, New York, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-9690-2089","authenticated-orcid":false,"given":"Ben L.","family":"Titzer","sequence":"additional","affiliation":[{"name":"Carnegie Mellon University, Pittsburgh, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-2059-5406","authenticated-orcid":false,"given":"Heather","family":"Miller","sequence":"additional","affiliation":[{"name":"Carnegie Mellon University, Pittsburgh, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2025,10,9]]},"reference":[{"key":"e_1_2_2_1_1","unstructured":"2020. The edge of the multi-cloud. https:\/\/www.fastly.com\/cassets\/6pk8mg3yh2ee\/79dsHLTEfYIMgUwVVllaa4\/5e5330572b8f317f72e16696256d8138\/WhitePaper-Multi-Cloud.pdf (Accessed 2021-07-06)"},{"key":"e_1_2_2_2_1","unstructured":"2021. Java Virtual Machine Tools Interface. https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/jvmti\/ (Accessed 2021-07-29)"},{"key":"e_1_2_2_3_1","unstructured":"2021. WebAssembly Multi-memory proposal. https:\/\/github.com\/WebAssembly\/multi-memory (Accessed 2025-07-28)"},{"key":"e_1_2_2_4_1","unstructured":"2023. Walrus: A WebAssembly transformation library. https:\/\/github.com\/rustwasm\/walrus"},{"key":"e_1_2_2_5_1","unstructured":".NET Wiki Authors. 2021. The .NET Profiling API. https:\/\/learn.microsoft.com\/en-us\/dotnet\/framework\/unmanaged-api\/profiling\/profiling-overview (Accessed 2023-8-4)"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/3591473"},{"key":"e_1_2_2_7_1","volume-title":"QEMU: A generic and open source machine emulator and virtualizer","author":"Bellard Fabrice","year":"2020","unstructured":"Fabrice Bellard. 2020. QEMU: A generic and open source machine emulator and virtualizer. http:\/\/qemu.org (Accessed 2023-8-07)"},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/2024569.2024572"},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/1294325.1294344"},{"key":"e_1_2_2_10_1","unstructured":"Andrew Black St\u00e9phane Ducasse Oscar Nierstrasz Damien Pollet Damien Cassou and Marcus Denker. 2009. Pharo by Example. 01 isbn:978-3-9523341-4-0 http:\/\/PharoByExample.org\/"},{"key":"e_1_2_2_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/976270.976282"},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1109\/CGO.2003.1191551"},{"key":"e_1_2_2_13_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-13595-8_5"},{"key":"e_1_2_2_14_1","volume-title":"ASM: a code manipulation tool to implement adaptable systems. Adaptable and extensible component systems, 30, 19","author":"Bruneton Eric","year":"2002","unstructured":"Eric Bruneton, Romain Lenglet, and Thierry Coupaye. 2002. ASM: a code manipulation tool to implement adaptable systems. Adaptable and extensible component systems, 30, 19 (2002)."},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/3679007.3685058"},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-031-44245-2_8"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/2908080.2908084"},{"key":"e_1_2_2_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/2088883.2088902"},{"key":"e_1_2_2_19_1","doi-asserted-by":"publisher","unstructured":"Elizabeth Gilbert Matthew Schneider Zixi An Suhas Thalanki Wavid Bowman Alexander Y. Bai Ben Titzer and Heather Miller. 2025. Debugging WebAssembly? Put some Whamm on it!. https:\/\/doi.org\/10.5281\/zenodo.16929456 10.5281\/zenodo.16929456","DOI":"10.5281\/zenodo.16929456"},{"key":"e_1_2_2_20_1","doi-asserted-by":"publisher","unstructured":"Elizabeth Gilbert Matthew Schneider Zixi An Suhas Thalanki Wavid Bowman Alexander Y. Bai Ben Titzer and Heather Miller. 2025. Debugging WebAssembly? Put some Whamm on it! (supplementary material). https:\/\/doi.org\/10.1145\/3763124 10.1145\/3763124","DOI":"10.1145\/3763124"},{"key":"e_1_2_2_21_1","volume-title":"Mac OS X and FreeBSD","author":"Gregg Brendan","year":"2091","unstructured":"Brendan Gregg and Jim Mauro. 2011. DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD (1st ed.). Prentice Hall Press, USA. isbn:0132091518","edition":"1"},{"key":"e_1_2_2_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/3062341.3062363"},{"key":"e_1_2_2_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/2668930.2688038"},{"key":"e_1_2_2_24_1","volume-title":"Proceedings of the 15th European Conference on Object-Oriented Programming (ECOOP \u201901)","author":"Kiczales Gregor","year":"2064","unstructured":"Gregor Kiczales, Erik Hilsdale, Jim Hugunin, Mik Kersten, Jeffrey Palm, and William G. Griswold. 2001. An Overview of AspectJ. In Proceedings of the 15th European Conference on Object-Oriented Programming (ECOOP \u201901). Springer-Verlag, Berlin, Heidelberg. 327\u2013353. isbn:3540422064"},{"key":"e_1_2_2_25_1","doi-asserted-by":"publisher","DOI":"10.21236\/ADA417906"},{"key":"e_1_2_2_26_1","volume-title":"Jim Des Rivieres, and Daniel G. Bobrow","author":"Kiczales Gregor","year":"1991","unstructured":"Gregor Kiczales, Jim Des Rivieres, and Daniel G. Bobrow. 1991. The Art of the Metaobject Protocol. MIT Press, Cambridge, MA, USA. isbn:0262111586"},{"key":"e_1_2_2_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/207110.207163"},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/3297858.3304068"},{"key":"e_1_2_2_29_1","volume-title":"Recent Advances in Parallel Virtual Machine and Message Passing Interface, Marian Bubak, Jack Dongarra, and Jerzy Wa\u015bniewski (Eds.)","author":"Ludwig Thomas","unstructured":"Thomas Ludwig and Roland Wism\u00fcller. 1997. OMIS 2.0 \u2014 a universal interface for monitoring systems. In Recent Advances in Parallel Virtual Machine and Message Passing Interface, Marian Bubak, Jack Dongarra, and Jerzy Wa\u015bniewski (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg. 267\u2013276. isbn:978-3-540-69629-2"},{"key":"e_1_2_2_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/1064978.1065034"},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/38807.38821"},{"key":"e_1_2_2_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/2162049.2162077"},{"key":"e_1_2_2_33_1","doi-asserted-by":"publisher","DOI":"10.1109\/2.471178"},{"key":"e_1_2_2_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/1960275.1960292"},{"key":"e_1_2_2_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/3464432.3464780"},{"key":"e_1_2_2_36_1","doi-asserted-by":"publisher","DOI":"10.1145\/1809028.1806618"},{"key":"e_1_2_2_37_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-031-20891-1_18"},{"key":"e_1_2_2_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/1273442.1250746"},{"key":"e_1_2_2_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/3242947.3242948"},{"key":"e_1_2_2_40_1","volume-title":"Bytecode-Level Analysis and Optimization of Java Classes. Master\u2019s thesis","author":"Nystrom Nathaniel John","unstructured":"Nathaniel John Nystrom. 1998. Bytecode-Level Analysis and Optimization of Java Classes. Master\u2019s thesis. Purdue University."},{"key":"e_1_2_2_41_1","unstructured":"Louis-No\u00ebl Pouchet. 2016. PolyBench. https:\/\/sourceforge.net\/projects\/polybench\/"},{"key":"e_1_2_2_42_1","doi-asserted-by":"publisher","DOI":"10.1145\/3578245.3584851"},{"key":"e_1_2_2_43_1","doi-asserted-by":"publisher","DOI":"10.23919\/CISTI54924.2022.9820136"},{"key":"e_1_2_2_44_1","doi-asserted-by":"publisher","DOI":"10.5555\/1267658.1267659"},{"key":"e_1_2_2_45_1","doi-asserted-by":"publisher","DOI":"10.1145\/1952682.1952711"},{"key":"e_1_2_2_46_1","doi-asserted-by":"publisher","DOI":"10.1145\/2617548.2617550"},{"key":"e_1_2_2_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491411.2491447"},{"key":"e_1_2_2_48_1","volume-title":"Runtime Verification: 20th International Conference, RV 2020, Los Angeles, CA, USA, October 6\u20139, 2020, Proceedings 20","author":"Soueidi Chukri","year":"2020","unstructured":"Chukri Soueidi, Ali Kassem, and Yli\u00e8s Falcone. 2020. BISM: bytecode-level instrumentation for software monitoring. In Runtime Verification: 20th International Conference, RV 2020, Los Angeles, CA, USA, October 6\u20139, 2020, Proceedings 20. 323\u2013335."},{"key":"e_1_2_2_49_1","doi-asserted-by":"publisher","DOI":"10.1007\/s10009-023-00708-z"},{"key":"e_1_2_2_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/178243.178260"},{"key":"e_1_2_2_51_1","unstructured":"Ben L. Titzer. 2021. Wizard An advanced WebAssembly Engine for Research. https:\/\/github.com\/titzer\/wizard-engine (Accessed 2021-07-29)"},{"key":"e_1_2_2_52_1","volume-title":"Whose Baseline Compiler is it Anyway? CGO \u201924","author":"Titzer Ben L.","unstructured":"Ben L. Titzer. 2024. Whose Baseline Compiler is it Anyway? CGO \u201924. Association for Computing Machinery, New York, NY, USA."},{"key":"e_1_2_2_53_1","doi-asserted-by":"publisher","DOI":"10.1145\/3620666.3651338"},{"key":"e_1_2_2_54_1","doi-asserted-by":"publisher","DOI":"10.2197\/ipsjjip.23.716"},{"key":"e_1_2_2_55_1","doi-asserted-by":"publisher","DOI":"10.1145\/1925805.1925818"},{"key":"e_1_2_2_56_1","doi-asserted-by":"publisher","unstructured":"Michael Van De Vanter Chris Seaton Michael Haupt Christian Humer and Thomas W\u00fcrthinger. 2018. Fast Flexible Polyglot Instrumentation Support for Debuggers and other Tools. The Art Science and Engineering of Programming. https:\/\/doi.org\/10.22152\/programming-journal.org\/2018\/2\/14 10.22152\/programming-journal.org\/2018\/2\/14","DOI":"10.22152\/programming-journal.org\/2018\/2\/14"},{"key":"e_1_2_2_57_1","unstructured":"Kenton Varda. [n. d.]. WebAssembly on Cloudflare Workers. https:\/\/blog.cloudflare.com\/webassembly-on-cloudflare-workers\/ (Accessed 2021-07-06)"},{"key":"e_1_2_2_58_1","doi-asserted-by":"publisher","DOI":"10.1145\/3519939.3523428"},{"key":"e_1_2_2_59_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-98989-1_7"},{"key":"e_1_2_2_60_1","doi-asserted-by":"publisher","DOI":"10.1145\/3316415"},{"key":"e_1_2_2_61_1","doi-asserted-by":"publisher","DOI":"10.1145\/2509578.2509581"},{"key":"e_1_2_2_62_1","doi-asserted-by":"publisher","DOI":"10.1145\/2814270.2814281"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3763124","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3763124","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,4,25]],"date-time":"2026-04-25T15:27:07Z","timestamp":1777130827000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3763124"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,10,9]]},"references-count":62,"journal-issue":{"issue":"OOPSLA2","published-print":{"date-parts":[[2025,10,9]]}},"alternative-id":["10.1145\/3763124"],"URL":"https:\/\/doi.org\/10.1145\/3763124","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,10,9]]},"assertion":[{"value":"2025-03-25","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-08-12","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-10-09","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}