Debugging Tools
Overview
Flash's debugging support extends only as far as JavaScript error messages (which are sometimes completely misleading) so xJSFL provides a range of functionality to let you debug erroneous code including:
- Visually debugging the error stack including files, line numbers and code
- Inspection of objects in both hierarchical and tabular form
- Testing functions using xjsfl.debug.test()
- Testing external files using xjsfl.file.debug & xjsfl.file.load() rather than fl.runScript()
The following is the output from xjsfl.debug.func() trapping an erroneous obj reference 3 levels down from the original function call:
ReferenceError: obj is not defined ---------------------------------------------------------------------------------------------------- 0 > ("popupslider","a","A",[object XML],[object Object],undefined,undefined) path: xJSFL/core/jsfl/libraries/ file: xul.jsfl line: 284 1 > ("title:Multiplier,numeric:A=[0,-100,100],numeric:B=[0,-100,100]") path: xJSFL/core/jsfl/libraries/ file: xul.jsfl line: 113 2 > ("title:Multiplier,numeric:A=[0,-100,100],numeric:B=[0,-100,100]",(function (a, b) {alert(a * b);})) path: xJSFL/core/jsfl/libraries/ file: xul.jsfl line: 135 3 > path: E:/05 - Commercial Projects/xJSFL/3 - development/xJSFL Projects/ file: temp.jsfl line: 23
Output.inspect() is arguably the workhorse of xJSFL's Output class, allowing you to hierarchically inspect any object, with built-in checks for troublesome properties that would otherwise crash Flash, and a slew of parameters to customise the processing and recursion:
Output.inspect(dom.library.items, 'Library items', 3)
Library items: Array (depth:4, objects:39, values:120, time:0.0 seconds) -------------------------------------------------------------------------------- array => Array [0] => SymbolItem [timeline] => Timeline name: "star graphic" [layers] => Array [0] => Layer frameCount: 1 currentFrame: 0 layerCount: 1 currentLayer: 0 [bindings] => Array symbolType: "movie clip" sourceFilePath: "" sourceLibraryName: undefined sourceAutoUpdate: undefined scalingGrid: false [scalingGridRect] => Object left: -2147483.648 top: -2147483.648 right: -2147483.648 bottom: -2147483.648 itemType: "movie clip" name: "star graphic" linkageExportForAS: false linkageExportForRS: false linkageImportForRS: false linkageExportInFirstFrame: undefined // additional properties truncated
Documentation
Guides
JSFL API
- Output: logging, introspection, and a variety of printing and formatting methods
- Table: outputs 2D Array/Object arrays to easily-readable ASCII tables
Hey
Love the framework! Quick question: have you ever come across the situation where a library item will incorrectly report that its linkageExportForAS is false and its linkage path is undefined? Re-saving the FLA will fix the issue and JSFL will start to get the correct values …
Thanks
Jed
Not yet. I’ll be publishing a bit list of Flash “gotchas” at some point, so perhaps I could put it in there.
Glad the framework’s working out for ya!