Finding the exact source to a bug can be a troublesome process, however there is several techniques used for debugging:
Sites to help debugging:
To debug any C++ or C programs include the file debug.h and in your 'Makefile' define DEBUG_STR, DEBUG_PRT, DEBUG_MEM to turn on the traces from the debug.h functions. When you remove the '-DDEBUG_STR' etc.. then the debug function calls are set to ((void)0) i.e. NULL, hence it has no impact on final production release version of project. You can generously use the debug functions in your programs and it will not increase the size of production executable.
See the file debug.cpp for implementation of debug routines.
And see the file my_malloc.cpp for a sample which uses debug.h and debug functions.
See the sample Makefile .