Firebug includes a powerful JavaScript debugger that
lets you pause execution at any time and see what each variable looked
like at that moment. If your code is a little sluggish, use the
JavaScript profiler to measure performance and find bottlenecks fast.
Find scripts easily
Many web applications are comprised of quite a number
of files, and finding the one you want to debug can be a chore.
Firebug's script file chooser sorts and organizes files into very clean
list that will help you find any file in a snap. You can also type to
filter the list.
Pause execution on any line
Firebug allows you to set breakpoints, which tell the
debugger to pause execution when it reaches a specific line. While
execution is pause, you can see the value of any variable and inspect
objects while time is frozen.
To set breakpoints, just click on any line number,
and a red dot will appear to indicate that the breakpoint is set. Click
the red dot again to remove the breakpoint.
Pause execution, but only if...
Breakpoints can be troublesome if you find them
breaking too often. Sometimes you only want to pause under very specific
conditions. Firebug allows you to set conditional breakpoints, which
check an expression that must be true for the breakpoint to pause.
To set a conditional breakpoint, just right-click on
any line number. A bubble will appear that prompts you to enter a
JavaScript expression. You can right-click again at any time to change
the expression, or left-click to remove the breakpoint altogether.
One step at a time
Once the debugger is paused, you can continue
execution one line at a time. This allows you to see exactly how
variables and objects are effected when a particular line is executed.
You can also choose to step execution for more than
one line. From the context menu, choose "Run to this Line" to continue
execution until it passes through the line you clicked.
I break for errors
You don't always choose to use the debugger.
Sometimes the debugger chooses you. Firebug gives you the option to
break into the debugger automatically when an error occurs so you can
examine the screwed up conditions that got you into trouble.
Stack traces unstacked
When the debugger is paused, Firebug shows you the
call stack, which is the set of nested function calls that are currently
running and waiting to return.
The call stack is represented as a compact strip of
buttons in the toolbar, each with the name of a function on the stack.
You can click any button to jump to the line where that function is
paused, and look at the local variables inside that function.
Watch expressions
While debugging, you often want to see the value of
complex expressions or objects that are buried in the DOM. Firebug
allows you to type in arbitrary JavaScript expression whose value will
be updated every time you step in the debugger.
As you type in these expressions, don't forget that you can use the tab key to autocomplete the properties of objects.
Variable tooltips
While the debugger is paused, you can move the mouse
over any variable in the current function to see a tooltip that reveals
the value of that variable. It's a great way to keep your eye on the
code and find answers as you read.
Profile JavaScript performance
Your web app is almost perfect. You've got all the
bugs worked out, the artwork has been dropped in, and the users are
loving it. Only one problem - some of your features are a little bit
sluggish and you're not sure why.
With Firebug, you'll never again wonder why your code
is slow. Using the Firebug profiler, you can separate the tortoises
from the hares within seconds.
To use the profiler, just go to the Console tab and
click the "Profile" button. Then use your app for a bit or reload the
page and then click the "Profile" button again. You'll then see a
detailed report that shows what functions were called and how much time
each one took.
Logging function calls
Sometimes a problematic function is called so many
times that you can't break into the debugger every time. You just want
to know when it's called and what parameters were passed in.
To track all calls to a function, just right click on
it in the Script tab and choose "Log calls to 'function name'". Then
hop over to the Console and watch the calls stream in.
Go directly to line 108, do not pass go
Often times you want to jump directly to a specific
line of your script. Doing this couldn't be easier, just type the line
number into the quick search box, preceded by the pound sign, as seen in
the screen shot on the right.
Browser and eval() generated code
For various kinds of events Firefox generates small Javascript functions. These appear
in Firebug under the URL of the page they were generated from followed by
event and with
a name derived from their source code. You can breakpoint these functions like any other.
Similarly Javascript created by
eval() calls appear in the list of files under the
page URL that called
eval(), with a source code summary for the name.
Executable lines are marked
Firebug's Script panel is using green color for a
line number if the related line is executable. This way you can always
know where to create a breakpoint.
Break notifications
The debugger can halt JavaScript execution for many
reasons. For example, the debugger can hit a standard script breakpoint,
HTML breakpoint, XHR or error brakpoints, etc. To make sure the user
understands the right reason a notification with details is displayed.
Open in external editor
Individual script files displayed by Firebug can be
opened in external editors or IDEs. Firebug also allows to properly
configure arguments such as line number, url, etc.