How can I debug a minified JS in firebug?

I have a web page which includes insane amount of minified JS files. The web page works perfectly fine on my local network but throws some JS error on staging. There is an issue in JS and I wan't to debug it. When I load the JS in Firebug's script tag it appears in one long horizontal line. Is there a way out in Firebug that expands or beautifies the script for debugging? I know I can use jsbeautifier but they wont help me. I can not upload an expanded file to CDN, defeats the purpose of using CDN.

Points to be noted,
a) I can not control the box which serves JS, its on CDN, I mentioned it.
b) I can use beautifiers etc but would that help me in debugging the script in run time? IMHO, no
c) Being bound by NDA and other legal things I can not share the script but its a generic problem, you can encounter it with a minified jQuery

  1. Beautify your script
  2. Add the CDN host in /etc/hosts or your local DNS to resolve it to your own web server
  3. Host the beautified version and everything that you need on said web server
  4. Both Firefox and Chrome (versions as of this edit) support beautifying script with the {} button available in the inspector.

Update: There's now a firebug extension that beautifies JavaScript:

It's working perfectly for me in Firefox 12.0.

Credit to this answer for spotting it.

Just load the minified file and press the {} button at the bottom and it instantly beautifies, making breakpoints and other debugging possible. (True for Chrome too)

This is a common problem and the Chrome dev team have recently come up with an elegant solution, which they've called Source Maps - see for more info, I think you'll find it's exactly what you (and the rest of us) have been crying out for! :)

This is more a workaround, but it can help. The idea is that we will replace files coming from the server by files on your machine.
This will work with any browser.
It takes a bit of setup the first time (15 minutes maybe), but then it can be very convenient.
It can also helps testing your bug-fixes in a live/prod environment.

  1. Get Fiddler (it's a web debugging proxy), install it, run it.
    (Restart browser after install to get the Fiddler extension)
  2. If you debug an HTTPS website, check this first:
  3. From now on, you should see in Fiddler ("Web Sessions" pane on the left) all downloads made by your browser, including JS files.
    If not, check this : Fiddler not displaying sessions
  4. Find the file you want to debug in the list (Ctrl+F works)
  5. Click on the file. Then either:
    • get the file content from the inspectors pane (textView tab), beautify it, save to a file on your local computer
    • or have access to a file which contains the source code (ex: from your source control)
  6. Go to AutoResponder tab (top left pane).
    Select "Enable automatic responses" checkbox.
    Select "Unmatched requests passthrough" checkbox.
  7. Drag your file from left pane to right pane (prefills rule editor at the bottom)
  8. Set the other field with the path of your local file
  9. Click the Save button
  10. Reload the page and enjoy your debugging session.

Fiddler can do many more things, but this use-case answers the initial question.

Consider a Change!

Firefox w/ Firebug was my favorite JavaScript debugging method for almost a year, but I've recently moved to Google-Chrome's Developer-Tools which is far more superior.

  • Chrome supports an On-The-Fly (built-in feature) beautification of JavaScript resources enter image description here

  • Once beautified, you are free to debug the JavaScript resource file, as it was "natively" downloaded beautified from the web-server. Breaking-points are set by clicking the line number. enter image description here

  • One of the most extremely powerful feature,
    Is once You've Stopped In A Breaking-point, You Are Free To Execute Commands (using console) In The Same Scope You ARE In The Breaking-point. In Firefox you can't do that. enter image description here Its so easy to debug (even anonymous functions), You'll never be back to Firefox.
    Try It!

Pretty-print your JavaScript. Google this and you'll find multiple on-line JS beautifiers.

I happen to use myself and it works fine, but search for others and use one that suits your needs.

Caveat: You still won't be able to get meaningful local variable names (which are usually renamed by a minifier). If the code was compiled by the Closure Compiler, then you absoutely won't get any useful information back at all, even when beutified, because then all variables and functions and properties are mangled (not only local ones).

Now, if your problem is with debugging code that comes from outside (e.g. a CDN), obviously that code would be minified, and you can't save your beautified version back there. In this case, you can replace the tags that load code from a CDN with a url pointing to your local version, then you can beautify the code (downloaded from the CDN) into your own server and you can then debug with FireBug.

Now, if you don't even control the HTML that contains those tags (e.g. they reside on a outside server), then unfortunately there is no way for you to do what you want without physically downloading the entire site to your own server. Even if you downloaded the entire site (with all the files), it may not work since the site may be driven by a back-end processing language or accesses a back-end database. In such case you'll also need to simulate all those data. It can be done, however -- you just have to go through a lot of pain. My recommendation is to save a version of the web page and run it on your own server, serving beautified code from your own server to debug.

Placing breakpoints on JavaScript makes debugging much easier, but if your code has already made it to production then it's probably been minified. How can you debug minified code? Helpfully, some of the browsers have an option to un-minify your JavaScript.

In Chrome and Safari, simply select the 'Scripts' tab, find the relevant file and then press the "{ }" (pretty print) icon located in the bottom panel.

In Internet Explorer, click the tool icon by the script selection drop down to find the option to format the JavaScript.

Opera will automatically prettify minified JavaScript. Source