Is the gui envisioned to be an ide plugin or a standalone application (ie swing, fx, ...)?
On Sun, Jan 24, 2021 at 2:08 PM Sloane, Brandon <bslo...@owlcyberdefense.com> wrote: > Following up on the recent discussion about the Daffodil debugger, I would > like to propose a roadmap for creating graphical debugger. > Organizationally, the GUI debugger is a separate application (maintained > in the normal Daffodil repository) that may include any of the current > Daffodil libraries as a dependency. > > Phases 1 and 2 focus on developing an enhanced trace functionality; where > Daffodil outputs a machine readable trace of the parse/unparse process. The > GUI then allows a user to view this trace offline. > > Phase 3 adds support for interactive debugging, by allowing the > Daffodil-cli and Daffodil-gui-debugger to act in a client/server > relationship > > Phase 4 focuses on backend debugger enhancements. > > In more detail: > > Phase 1: > > - Add a --machine-trace flag to Daffodil CLI, that is analogous to the > current --trace option. Output is a stream of XML parse-state nodes, each > one describing the current state of the parse, including: > - Current infoset > - Current bit position > - Current parser > - A UID of the current state > - A UID of the parent state (in event of backtracking, multiple > states will have the same parent). > - Machine-trace output stream also include input-data nodes, that > include: > - A region of (byte aligned) input data (hex encoded?) > - The byte position of the start of the region > - The relative location of the input data nodes is undefined, but > given the complete trace, it should be possible to reconstruct the > original > dataset by stitching together the data in the nodes. The goal here is > that > we can just output data as Daffodil reads it in. > - --machine-trace take an optional argument of a file path. If > provided, its output will be directed to a file at said location (otherwise > stderr) > - Create a GUI program that can ingest the machine trace and display > it in a 4-pane view: > - Pane 1 - trace navigator > - Represents the entire parse in a tree format. Each parse state > corresponds to a node on the tree > - The user can select a node on the tree to load it into the > other panes > - Pane 2 - Infoset viewer > - Shows the complete infoset corresponding to the node selected > in pane 1. > - Indicates the "current" position of the parser within the > infoset > - Highlights changes in the infoset relative to the parent node. > - Pane 3 - binary viewer > - Shows a complete hex-dump of the input data, indicating > current location within the parse > - Pane 3 -- parser view > - Shows the current parser. Probably will be a dumping ground > for additional information that does not warrant the addition of a > new pane. > > > Phase 2: > > - Support showing suspensions on unparse > - Display additional data about the parse/unparse state: > - Delimeter stack > - Variables > - Support additional formats for displaying input data > - Text (of selectable encoding) > - Binary (not hex; actual 1s and 0s) > - Support generating traces through the API as well. > > Phase 2.5: > > Gather user feedback and iterate on the trace viewer functionality > > Phase 3: > > - Define protocol for the debugger to talk with the CLI. > - Debugger can load schema, and input data. > - Debugger can step through the parse/unparse > - Viewer built in phases 1 and 2 continually updates as the parse > proceeds > - User can send CLI debugger commands and get the textual response; > but only for the current parse/unparse state. > - User can set breakpoints (possibly using textual commands). Debugger > supports continue until breakpoint > > Phase 3.5: > > > - Not debugger related, but as long as the Daffodil CLI can operate as > a server, support server mode operations for non-debug use cases. > > > Phase 4: > > - Support time travel debugging, with an interface in both the CLI and > GUI debuggers > - Support associating a trace with schema source, and allowing a "go > to source" functionality where the user can navigate directly to the > location in source corresponding to the current parser > - Support dynamically editing/reloading schema and input data > > Thoughts? > Brandon Sloane | Engineer > > bslo...@owlcyberdefense.com > > Connect with us! > > <https://www.linkedin.com/company/owlcyberdefense/> > <https://twitter.com/owlcyberdefense> > > <https://owlcyberdefense.com/resources/events/> > > > > The information contained in this transmission is for the personal and > confidential use of the individual or entity to which it is addressed. If > the reader is not the intended recipient, you are hereby notified that any > review, dissemination, or copying of this communication is strictly > prohibited. If you have received this transmission in error, please notify > the sender immediately > >