Skip to content Accesskey=4Skip to sub-navigation Accesskey=3View our Accessibility Options MIT Information Systems Home About IS&T Contact IS&T Site Map Search Advanced Search
Getting StartedGetting Services by Topic or Alphabetically Getting Help

On This Page

[Help]

  

Quick Links

Top Level

Related Links

Ask OLC a question

Athena Consulting Homepage

Helpdesk Stock Answers (for Mac/PC questions)


Introduction to DEBUGGING

If your program exits abnormally, such as with a "bus error,", then there
is almost certainly a logical error (a bug) in your program.  99% of
programming is finding and removing these bugs.  Here are some tips to
help you get started.  Remember, though, that debugging is an art, and
takes practice to do well.

Before going on, it is necessary to reiterate the standard OLC
policy on program debugging: Do *NOT* ask OLC for help debugging a
program.  This stock answer is intended to give you some tips on how to
get started in this area; however, in general, program debugging requires
more time and effort than consultants are usually able to provide.

The first step is to find the exact line where the program exits.  One way
of doing this is with print statements scattered through your code.  For
example, you might do something like this in your source code:

	myplot(int x, int y)
	{
		printf("Entering  myplot()\n"); fflush(stdout);
		---- lots of code here ------
		printf("Exiting myplot()\n");  fflush(stdout);
		return;
	}

The fflush() command in C ensures that the print statement is sent to your
screen immediately, and you should use it if you're using printf()'s for
debugging purposes.

Once you have narrowed down the line where your bug occurs, the next step
is to find out the value of your variables at that time.  You will
probably find that one of your variables contains very strange values.
This is the time to check that you have not done the following things:
	- assigned an integer value to a pointer variable;  or
	- written to a subscript that is beyond the end of an array
	  (remember that in C array subscripts go from 0 to N-1, not
	  from 1 to N.)

Other mistakes also cause bugs.  Make sure that your loops test correctly
for their end conditions, for example.

Other kinds of bugs (programs not exiting, incorrect output) are debugged
using similar methods.  Again, find the line where the first error occurs,
and then check the values of your variables. Once you fix a bug, recompile
your program, run it again, and then debug it again as necessary.

Using printf()s is a primitive method of debugging, but sometimes it's the
only one that will work.  If your program is too big for a debugger (such
as saber or dbx) or if you are working on a non-Athena platform, you may
not have a debugger available.  Usually, though, it is quicker and easier
to use a debugger.  Athena has several sophisticated debugging tools
available.  Saber is the tool of choice for C programmers.  Gdb and dbx
may also come in handy, and both of these work with Fortran as well as
with C.  There are stock answers that introduce Saber and dbx, and Saber
even comes with a tutorial.

Good luck with your programming.


last updated: 6/12/95

MIT Home | Getting Started | Getting Services | Getting Help | About IS&T | Accessibility
Ask a technology question or send a comment about this web page.