Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set breakpoints and debug eval'd JavaScript

I* am using client-side JS to parse XML files and generate complex JS code to eval as a result. (Generating re-usable functions that are kicked off by a runtime.) However, I need to debug the code being generated, and would like to use Chrome's built-in breakpoints, stepping, watch windows, etc.

Is there an easier way to do this than:

  • Dump the generated JS string to the console and/or window.
  • Copy the JavaScript
  • (optional) Run the JS through a prettifier like JSBeautifier.
  • Paste the JS into a file that is loaded via <script src="..."> in another web page.

* actually, a friend of mine was doing this, not me

like image 422
Phrogz Avatar asked Jun 28 '12 15:06

Phrogz


People also ask

Can you set a breakpoint in JavaScript?

Setting BreakpointsIn the debugger window, you can set breakpoints in the JavaScript code. At each breakpoint, JavaScript will stop executing, and let you examine JavaScript values. After examining values, you can resume the execution of code (typically with a play button).


1 Answers

Instead of using eval, and instead of manually copy/pasting into a separate file, you can dynamically load the JS directly into the page that generated it by using a data uri on a dynamically-created <script> element. With this approach, Chrome's Developer Tools (and Firebug) allow you to pick the data-URI as a script, turn on the Pretty Print, set breakpoints, and away you go.

var js = createMyJSCodeString();
addCode(js); // Right now! Debuggable!

// Dynamically evaluate JavaScript-as-string in the browser
function addCode(js){
  var e = document.createElement('script');
  e.type = 'text/javascript';
  e.src  = 'data:text/javascript;charset=utf-8,'+escape(js);
  document.body.appendChild(e);
}
like image 192
Phrogz Avatar answered Sep 29 '22 01:09

Phrogz