I assume the 2nd type would be some time after the MVP? On Wednesday, March 9, 2016 at 5:29:12 PM UTC-8, Dan Gohman wrote: > > For WebAssembly, I expect there will be two main kinds of debugging. > > One is debugging at the wasm level. The wasm binary format is defining > symbol sections to provide basic information to assist this, and it'll be a > generally low-level experience. > > The other is high-level language debugging. It isn't feasible for browsers > to support high-level language debuggers for all languages that will want > to compile to wasm, so what we'll need are browser interfaces which allow > web content to implement debugger functionality itself. Debug info > supporting such a debugger would likely be plain DWARF, though it could be > anything else a debugger might want, since the browser itself wouldn't be > interpreting it. > > Dan > > > On Wed, Mar 9, 2016 at 5:01 PM, Charles Vaughn <cva...@gmail.com > <javascript:>> wrote: > >> >> >> On Wednesday, March 9, 2016 at 11:45:53 AM UTC-8, Alon Zakai wrote: >>> >>> For 1, I think the burden here should be on the browser debuggers. They >>> have been making progress on improving responsiveness on large JS files. >>> Helping them directly might make sense, for the open source ones, Chrome >>> and Firefox. For Firefox, you can track progress here, >>> >>> https://bugzilla.mozilla.org/show_bug.cgi?id=1229092 >>> <https://www.google.com/url?q=https%3A%2F%2Fbugzilla.mozilla.org%2Fshow_bug.cgi%3Fid%3D1229092&sa=D&sntz=1&usg=AFQjCNHLDUrkwVPfWZsR-zVW75-YmF3qkg> >>> >>> >> Awesome that this is being tracked. There's another aspect of this, and >> that's it would be beneficial to debug highly optimized Javascript, pretty >> much requiring separate metadata. >> >> >>> For 2, there have been discussions of a "source maps 2" that would >>> include more info, see >>> >>> https://github.com/source-map/source-map-rfc/issues >>> <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fsource-map%2Fsource-map-rfc%2Fissues&sa=D&sntz=1&usg=AFQjCNFYjfVgjg2z7WhnUN5-txm2f631hw> >>> >> >> Interesting, but doesn't seem like its gotten very far. I'm a bit >> skeptical of a general object pretty printer approach that would work for >> both heap stored objects and native-to-the-VM objects without either; a) >> having to support running arbitrary code to restructure the objects or b) >> having distinct code bases for each approach. >> >> >>> >>> >>> There is also talk in WebAssembly about a debug format inspired by >>> DWARF, so your idea may fall along similar lines, and if you're designing a >>> new format for debugging, see >>> >>> >>> https://github.com/WebAssembly/design/blob/c8137d9a6bdefd015f5daadd3f0eb233dc6996b6/FutureFeatures.md#source-maps-integration >>> >>> <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2FWebAssembly%2Fdesign%2Fblob%2Fc8137d9a6bdefd015f5daadd3f0eb233dc6996b6%2FFutureFeatures.md%23source-maps-integration&sa=D&sntz=1&usg=AFQjCNEdUl3gVgDOBXFDZaX8omN_wucilQ> >>> >>> (WebAssembly is the future in this space, so it might make sense to >>> focus on that - although, that future will take a while longer to get here.) >>> >>> >> So digging around that link and the repository, I didn't find any >> specific mentions to DWARF. That being said, as the WebAssembly backend is >> a proper AsmPrinter, it's much easier to emit DWARF, as much of that >> support is already built in to LLVM. I'm looking forward to being able to >> target WASM for this type of stuff, but with it's early stages, and the >> need to support non WASM browsers still in my future, there's still value >> for me in getting some level of debugging support working. >> >> >>> Overall, I'd be a little worried about us inventing a new debug format >>> here - it should be, as much as possible, a shared project with the entire >>> ecosystem. >>> >> >> For ecosystem, are you thinking asm.js + WebAssembly? In the case of >> WASM, this should probably just work. The type graph is 75% of the >> complexity here, and would be reusable with any system that uses a flat >> heap and structures its composite types in a relatively straightforward >> way. The next 20% of the complexity is the intrinsics for associating >> values in the compiled program with variables in the source code. >> >> Those are currently realized in my prototype like this: >> >> $someVar = c[10289>>2]; >> metadata_llvm_dbg_value_local($someVar, 123, 0, "someVar"); >> >> A debugger can hook that function, and update a local variable view. As >> long as WASM has some ability to call external functions, that's relatively >> easy to add. >> >> I feel like a minimal system delivered in the interim could provide >> benefits without being blocked on WASM, as well as represent a smooth >> upgrade path going forward. There's also a class of work around this topic >> that would be largely agnostic to the format, such as debugger UIs and >> complex type visualizers. Landing something asm.js early would let that >> ecosystem have time to develop, giving WebAssembly a head start. >> >> >> >> >>> >>> 3 is, I believe, an emscripten bug. It would be great to have that fixed! >>> >> >> I may separate the work I have for that, as it's standalone from the >> object printer stuff. >> >> Thanks for your feedback. >> >> >>> >>> On Mon, Mar 7, 2016 at 6:23 PM, Charles Vaughn <cva...@gmail.com> wrote: >>> >>>> As part of my company's (Tableau Software) work with Emscripten, we've >>>> wanted to come up with better tooling around debugging. 3 main pain points >>>> we're hoping to address: >>>> >>>> 1. Debugging large code bases results in large (50+MB) size output >>>> Javascript, which prevents any sort of interactive debugging, at least on >>>> the tools I've used >>>> 2. Heap allocated data is pretty opaque >>>> 3. Source maps are currently busted on any level of optimization >>>> >>>> I have a work in progress design doc here: >>>> https://gist.github.com/hackcasual/ea77cc31c6dafdda7274 >>>> Changes to JSBackend to output the file format and add in the debug >>>> intrinsics are here: >>>> https://github.com/kripken/emscripten-fastcomp/compare/incoming...hackcasual:tableau-debugger-work >>>> >>>> I've got an initial driver (though out of sync with the format >>>> generated in the current changes to JSBackend), you can see here to have >>>> some understanding of how the types are interpreted: >>>> https://gist.github.com/hackcasual/efb93d70c4c3e87cd1ee >>>> >>>> More work needs to be done to get this into shipping shape, but I'd >>>> like to kick of discussions now. >>>> >>>> Thanks! >>>> >>>> Charles Vaughn >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "emscripten-discuss" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to emscripten-discuss+unsubscr...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "emscripten-discuss" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to emscripten-discuss+unsubscr...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > >
-- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.