The Debugging Process - Washtenaw Community College

Download Report

Transcript The Debugging Process - Washtenaw Community College

The Debugging Process
Syntax Errors
CPS120
Introduction to Computer Science
Lecture 4
Compiling and Debugging

Executable code will not be created until
you correct all of the syntax errors in your
source code
Syntax & Logic Errors

A syntax error is simply the violation of the
rules of a language; misuse of structure and
form in programming or a violation of the
compiler’s rules. These errors are detected
by the compiler
– Also know as 'fatal compilation errors'

A logic error is a mistake that complies
with the rules of the compiler that causes
the program to generate incorrect output
Compiling or Re-compiling
1. Open the file by going the directory you stored it
in and double clicking on it
2. Scan the source code for obvious errors before
attempting to compile
3. Attempt to compile using the COMPILE button
or choosing the first option on the BUILD menu
4. Answer Yes to use the default project workspace
–
The lower window will be active and the compile will
occur
5. Note the number of errors and warnings
–
These need to be dealt with before executable code is
created
Debugging
Debugging is the process of locating and
fixing or bypassing bugs (errors) in computer
program code or the engineering of a hardware
device.
 To debug a program or hardware device is to
start with a problem, isolate the source of the
problem, and then fix it.

Debugging Objective
1.
Find the line(s) containing the syntax error(s)
using the compiler's chosen line and error
messages as a starting point
Debugging is an Art



Compilers often miss reporting an actual error and
report on subsequent lines which are effected by
error but may be completely correct
After encountering a real syntax error, compilers
often generate many incorrect syntax error
messages
Different compilers produce different errors and
warnings for the same errors in the same program
Debugging Steps
1.
2.
3.
Proofread before compiling
Compile
Correct all the obvious errors
»
»
»
»
4.
Start at the beginning of the list of errors and warnings
A single syntax error may cause the compiler to believe numerous
other syntax errors are occurring
Look at the error lines and if you see the error, fix it. Otherwise,
leave it for later. It may vanish when you fix something else
Don’t worry if more errors appear. Some errors mask other errors
Recompile when you have fixed what you recognize
Debugging Steps
5.
6.
7.
8.
Repeat 3 & 4 until no further errors are
obvious
Attempt to solve the remaining errors in a
top-down fashion
Solve whatever errors you can without
spending long periods of time on any given
error
Recompile whenever you feel you don’t see
any further solutions
Debugging Aids
1.
In the Visual C++ (and other GUI-based
compilers) double-clicking on an error message
move the cursor to the line where the compiler
detected the error
– This may not be the actual line where the error
occurred – don’t trust the compiler on lines
2.
3.
Work from the beginning of the program,
because in most compilers, the errors are
detected from the beginning to end, sequentially
Some errors are so severe, they stop the compiler
from continuing so more errors may appear after
you successfully fix one or more
A Debugging Mindset

Assume your syntax is wrong. Look it up!
» Add working comments as you change things

If you are 100% sure a line is correct, then
search for a syntax error in the lines
ABOVE that line
– Start with the immediately previous line and
work backward

Never make a change you can’t explain
A Working Debugging Comment
cuot << "This is a line of code"<< endl;
/*************Debug*************
Error is undeclared identifier
1. Checked syntax for endl
2. Check syntax for screen output
-- Cuot is misspelled
*/
Debugging Checklist
1.
Visually verify the spelling and case of keywords and
identifiers
-- Remember, in the editor, keywords are blue, literals are black
and comments are green
-- Look for problems with l and 1 and o and 0
2.
Verify syntax with a reference book, not just visually
-- Don’t trust your eyes; you see what is supposed to be there
3.
4.
Try to find an example in the reference book that does
something similar and compare the code
Verify that the necessary delimiters used for that line are
there
-- Check the lines above and below as well
Debugging Checklist
5.
6.
Without looking at your source code or notes, rewrite the
instruction on a piece of paper and then compare it to
your actual code; don’t cheat
Verify that the line is really the source of the error by
commenting the line using //
a)
b)
c)
d)
Don’t worry about other errors that result from this
If the error disappears, it probably results from the line you are
working on
If it moves to the next line it is probably caused earlier in the
code
Remember that the compiler cannot be trusted to pinpoint lines
Debugging Tutorial – Some
Practice







Press the compiler button to run first scan of
program
Verify the number of errors that appear in the
lower window
Double click on an error to jump to the
referenced line of the program
Read and examine the error
Correct the error
Save the file
Recompile
Some Recognizable Errors



If a delimiter is missing is indicated before the
first word, the error belongs on the previous line
If you use an open parenthesis, there must be a
corresponding closing parenthesis
An undeclared identifier error generally means a
misspelling has occurred
– This includes case errors. Keywords have no caps
– Remember, in C++, the case of everything matters

It is not possible to illustrate every conceivable
error, nor is it possible to describe all of the
circumstances that generates errors
C2065: Undeclared Identifier
1. Several things may produce this error
»
»
»
»
Misspelling a keyword
Misspelling a programmer defined name (identifier)
Misuse of case in a keyword or identifier
Failure to declare an identifier
Delimiter Errors

C2146: syntax error : missing '; '
– The programmer must tell the compiler where an
instruction ends

C2059: syntax error : ';'
– Involves the use of braces, brackets and parenthesis in
C++

C1004 : unexpected end of file found
– Often caused by missing } or an extra { somewhere
» Use // to sequentially number opens and closes
– Missing closes can cause some horrible messes
Common Causes for Errors
Remember that in C++, lowercase letters
are different from uppercase letters
 Beware of unmatched parenthesis, square
brackets, and curly brackets
 It is easy to forge the last double quote in a
string
 The left side of an assignment must be a
variable

All I Have is Warnings – Am I
Done?
Even though an executable has been
generated, you may not be done with syntax
errors
 Compilers generate syntax warning
messages which are not fatal errors but
represent special error checking functions
for certain common programming errors

Warnings

Actions that may represent problems but do
not cause the compiler to flag an error
– Don’t ignore warnings
– Most common warning is a ‘typecasting’
warning
» Indicates that the conversion of one type of a number
was moved to a number (variable) of a different type
without inclusion of a typecasting operation

E.G. – Moving a float to an integer variable
Common Causes for Warnings
An equal sign used in an expression is
actually an assignment operator, not the
relational operator testing for equality
 Loops where one condition could never
logically be executed
 Testing a variable that has not received a
value yet

Disk Space Issues

If the floppy is full or becomes full during
the compilation process, the compile will
fail with an error message such as:
– fatal error C1033: cannot open program
database
» A very cryptic message like this can result

If you are not able to view all of the
intermediate files created in a compile,
suspect a space error
Linker Errors

Not all syntax errors are detectable by the
compiler
– These errors do not become apparent until files
are put together to create an executable
– These errors are not linked to a specific line of
code
» Look for the name of the variable and see what lines
of code it occurs on using EDIT and FIND


LNIK2001: unresolved external
LNK1120: unresolved externals
Executing the Program

Use REBUILD ALL on the BUILD menu
– An .EXE file will be created

The EXECUTE button is a red exclamation
mark
– You can also press CNTL-F5