A source-level debugger permits you to perform your entire debugging session from a high-level language point of view. You can display and set variables by name even if they are local (on the stack), you can also single step one high-level language statement at a time. Breakpoints are specified in terms of source line numbers or function names.