Debugging Your First Java Application
On this page:
- Before you start...
- Putting breakpoints
- Starting a debugger session
- Stepping through the application
- Stepping through the statements directly
- Stepping through the method calls
Before you start...
However, it would be nice to add one more line to the application - let it be
System.out.println("it's me, Wombat!");
To start a debugger session, first of all you need to place a breakpoint at the statement where you want to suspend the execution of your application. The existing source code does not give you much of a choice - the only place, where you can put breakpoints, are the statements
System.out.println("Hello World!"); System.out.println("it's me, Wombat!");
So let's do it. Click the left gutter at the line of the statement you want to put a breakpoint on, or just press Ctrl+F8:
As you see, the new breakpoint is added to the source code. The line where the breakpoint is set changes its color to pink.
If you just hover your mouse pointer over the breakpoint, you will see its properties in the tooltip:
Suppose you want to change some properties of this breakpoint. Then right-click it and see the following dialog box:
Finally, you would like to explore and change all the available properties of a breakpoint and see its location among the other breakpoints (if any). In this case, press Ctrl+Shift+F8:
Starting a debugger session
Now that the breakpoints are added, you can debug your application. This can be done in numerous ways; however, let's follow the easiest one.
Mind the icon that marks a class with the
main() method. Clicking this icon reveals a menu that enables running and debugging such a class:
What does it mean?
IntelliJ IDEA launched the debugger session with the temporary run/debug configuration. This run/debug configuration has the default name "HelloWorld.main()'. To view and change the settings of this run/debug configuration, choose on the main menu:
IntelliJ IDEA compiles your application (which takes time!), and then suspends the application at the first breakpoint.
The IntelliJ IDEA window now looks different:
- The first thing that has changed is the color of the first line with the breakpoint. Now this line is rendered blue:
It means that (according to the breakpoint properties) the application has reached this breakpoint, hit it and suspended before the statement
- Next, in the lower part of the IntelliJ IDEA window, a special tool window has emerged. This is the Debug tool window that features the stepping toolbar and shows all the necessary information you might need during the debugger session:
Stepping through the application
Stepping through the statements directly
Let's step through the application. Click on the stepping toolbar, or just press F8.
The next line now becomes blue. If you look at the Debug tool window, you notice the following changes:
- In the Frames pane, the next line number is shown.
- The Console tab is marked with the icon , which means that it contains new output.
Click the Console tab. You see the message of the first line with the breakpoint "Hello, World!". The second message is not yet visible:
Click again on the stepping toolbar, or press F8. Now the second message appears in the console. After you click the next time, the application stops:
This debugging session is over.
Stepping through the method calls
Now let's explore a more complicated way and step into the
First, restart the debugger session. To do that, just click on the toolbar of the Debug tool window. Thus you'll rerun the latest run/debug configuration, namely, HelloWorld.
The application again pauses at the first breakpoint. This time, click , or press Shift+Alt+F7. You see a different picture:
It means that IntelliJ IDEA has stepped into the method
println(String x) of the library class
PrintStream.java. Note that a new thread appears in the list of threads.
Click or press Shift+F8 to return to the next breakpoint:
Note that the Console tab has again got the marker , which means that new output is available. Next, click . You see that the process terminates: