Code Monkey home page Code Monkey logo

tracegl's Introduction

TraceGL

TraceGL MPL release (C) Mozilla Corp

Running traceGL unpackaged:

git clone [email protected]:/traceglMPL/tracegl.git
cd tracegl
node trace/trace_server.js

Packaging tracegl into a single JS file you can copy everywhere (like your home dir)

node tools/packer.js trace/trace_server tracegl.js
cp tracegl.js ~/

How it works

traceGL transforms your JavaScript, injecting monitoring code that produces a log of everything that happens. This log is streamed from the target (node or browser), via the traceGL node.js process to the UI for visualisation. The UI tries to display the resulting huge amount of information fast, and uses webGL to render everything.

Node.js programs

node ~/tracegl [options] yourprogram.js [arguments]

The visualisation UI is available on http://localhost:2000.

Browser JS via static fileserver

The built in static fileserver allows traceGL to instrument all the JavaScript files it serves to the browser and gather information. It auto-reloads the site when a file changes so you can live-code with it.

node tracegl [options] ../path/to/wwwroot

Browser JS via proxy

Sometimes your JavaScript is delivered by your Rails or Java backend to the browser. In this case you need a man-in-the-middle approach via traceGL's proxy mode. For a Ruby backend on port 3000:

node tracegl [options] http://localhost:3000

Editor integration

By doubleclicking on a line in the visualisation UI you can open it in your favorite editor. See the settings for information how to configure this

Commandline options

node ~/tracegl [options] target [args]

target can be 1. a node.js program, 2. a static folder, 3. a proxy target or 4. a gzip file created with -gz to playback.

options can be:

-gz[:trace.gz] Record a trace to gzip file, defaults to trace.gz, doesn't start the UI.

Filtering can be useful to lower the amount of incoming tracedata. Use -do and -no with either a -do:string or a -do/regex match. Use double escaped backslashes in regexps (see -nolib).

-do[/:]match Only trace files where filename contains match.

-no[/:]match Don't trace files where filename names contains match.

-nolib Only see your own code. Short for: -no/jquery.* -no:require.js -no/node\_modules

-noopen Don't try to open the visualisation UI with your default browser

-ui:port Explicitly set the visualisation UI port, default is 2000

-tgt:port Explicitly set the browser JS port, defaults to 2080

-settings Write a settings tracegl.json template in current dir, see settings file

-update Update tracegl.js to the latest version, uses your token to fetch update

Settings file

For other settings and commandline defaults traceGL supports a tracegl.json file which it tries to read from the current directory, your home dir, or the directory you store the tracegl.js file (in that order).

Create a template tracegl.json using the -settings command, and then modify these fields:

"ui":2000 Set the UI port, -ui:port commandline 
"tgt":2080 Set the browser JS port, -tgt:port commandline
"no":[":match"] Takes an array, -no commandline options
"do":["/regexp"] Takes an array, -do commandline options
"theme" : "dark" UI Theme, other option: light

Editor integration uses a commandline call to your editor, and uses $file and $line to build up the arguments. Put it in the right platform key (darwin, win32, sunos, linux, freebsd). If you have a configuration thats useful, please consider sharing it in a github issue so it can be turned into a default.

"bin":"/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"
"args":["$file:$line"]

Issues

traceGL cannot instrument JavaScript coming from outside of its reach. For instance if you load jQuery from the google CDN, it cannot visualise that codeflow because it is not delivered by the traceGL proxy or static fileserver. If you keep your JS served through traceGL it should be no problem.

tracegl's People

Contributors

traceglmpl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tracegl's Issues

can't execute file: /Users/npetersohn/dev/tracegl/trace/trace_server.js

the command refers to the bin/server.js file of this boilerplate https://github.com/erikras/react-redux-universal-hot-example with the -nolib option


[trace.GL] See your code. 
[trace.GL] WebGL trace UI: http://0.0.0.0:2000
[piping] can't execute file: /Users/npetersohn/dev/tracegl/trace/trace_server.js
[piping] error given was: Error: Cannot find module './instrument'
    at Function.Module._resolveFilename (module.js:336:15)
    at /Users/npetersohn/dev/tracegl/core/define.js:67:20
    at Object.<anonymous> (/Users/npetersohn/dev/tracegl/trace/trace_server.js:23:19)
    at module.exports.global.define (/Users/npetersohn/dev/tracegl/core/define.js:80:18)
    at Object.<anonymous> (/Users/npetersohn/dev/tracegl/trace/trace_server.js:8:1)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Module._load (module.js:310:12)
    at Function.module._load (/Users/npetersohn/dev/someapp/node_modules/piping/lib/launcher.js:32:16)
[piping] further repeats of this error will be suppressed...

Unreadable text in Chrome and Firefox

Not sure if this is the same issue as the year old fonts not working but In chrome I never get readable text and got it once in Firefox but then no more.

No errors in the nodejs server so I think its something on the browser, Chrome has some messages in the console:
WebGL: INVALID_VALUE: enableVertexAttribArray: index out of range
WebGL: INVALID_VALUE: vertexAttribPointer: index out of range
Firefox has none.

Using the following browsers:
Version 43.0.2357.65 (64-bit)
Firefox 38.0
on Fedora 20.

======Some more info=======

Works "fine" if I start a new firefox profile: firefox -new-instance -p

After a reboot I noticed it works in my default profile until I reload it. Maybe something to do with plugins installed (firebug maybe). but starting a fresh new profile fixed it. Reloading won't break it either.

Please let me know if I can be of any assistance, this looks like a valuable tool as it can "record" what your code does and inspect it later with some information about local variables and code flow.

Fonts not working in Ubuntu 14.04

Hi! Thanks for an amazing code contribution.

Fonts aren't working here in latest Chrome or Firefox, screenshot below:

screenshot from 2014-05-31 10 30 02

There are some WebGL errors on the console:

Can't find symbol 'glXCreateContextAttribsARB'.
"initnew: 559" fn.js:614
Error: WebGL: enableVertexAttribArray: index -1 is invalid. That probably comes from a getAttribLocation() call, where this return value -1 means that the passed name didn't correspond to an active attribute in the specified program. gl.js:33
Error: WebGL: vertexAttribPointer: index -1 is invalid. That probably comes from a getAttribLocation() call, where this return value -1 means that the passed name didn't correspond to an active attribute in the specified program. gl.js:76

In case it matters, I'm using a very high DPI screen (260 dpi; 3200x1800 at 14").

Cannot read property '1' of null

$ node tracegl.js server-test.js
[trace.GL] See your code.
[trace.GL] WebGL trace UI: http://0.0.0.0:2000

c:\Users\avladutu\Desktop\node_tests\tracegl-impl\tracegl.js:4023
n = define.factory[k].toString().match(/\/\/CHANNEL\n([\s\S]*)\/\/CHANNEL/)[1]
                                                                           ^
TypeError: Cannot read property '1' of null
    at mkHead (c:\Users\avladutu\Desktop\node_tests\tracegl-impl\tracegl.js:4023:84)
    at instrument (c:\Users\avladutu\Desktop\node_tests\tracegl-impl\tracegl.js:4029:20)
    at Module.m._compile (c:\Users\avladutu\Desktop\node_tests\tracegl-impl\tracegl.js:41:12)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at Function.require (module.js:380:17)
    at nodeLoader (c:\Users\avladutu\Desktop\node_tests\tracegl-impl\tracegl.js:53:10)
    at Object./trace/trace_server (c:\Users\avladutu\Desktop\node_tests\tracegl-impl\tracegl.js:28:65)

Can't unzip trace.gz

Feeling dumb here but none of the unzipping tools I try can open the file. Can you recommend one or is there something wrong.

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.