0% found this document useful (0 votes)
38 views16 pages

Week10 DEBUGGING

This document discusses various types of errors that can occur in programs and methods for debugging programs, including: manually tracing programs, using print statements, and using a debugger. It describes common loop errors like off-by-one errors, errors in conditional statements, and errors in updating loop counter variables. It also provides examples of how to debug programs using print statements and a debugger by stepping through code, watching variables, and setting breakpoints.

Uploaded by

manar mohamed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views16 pages

Week10 DEBUGGING

This document discusses various types of errors that can occur in programs and methods for debugging programs, including: manually tracing programs, using print statements, and using a debugger. It describes common loop errors like off-by-one errors, errors in conditional statements, and errors in updating loop counter variables. It also provides examples of how to debug programs using print statements and a debugger by stepping through code, watching variables, and setting breakpoints.

Uploaded by

manar mohamed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 16

Program Errors and

Debugging
Week 10, Thursday Lab
Debugging Programs
• Manually verify your program first
– Trace the program by hand
• With the different inputs it can take
• Use print statements
• Using the debugger
Off-by-One Loop Errors
• Executing the loop by one more or one less
time than it is supposed to
– If a sentinel-controlled while loop performs extra
repetition, it may erroneously process the sentinel
value along with the regular data
• (e.g. when reading from a file, WHILE eof).
• Checking Loop Boundaries by hand:
– Evaluate initial expression and the final expression
– Substitute these values everywhere the counter
variable appears in the loop body
– Verify that you get the expected results at the
boundaries
Conditional Errors
• Probably the most common error is not using or
misusing BEGIN and END.
• IF <condition> THEN
<statement>
ELSE SINGLE STATEMENTS or
<statement> COMPOUND STATEMENT

• CASE <selector> OF:


<label-list> : <statement>

ELSE
<statement-list> <statement> ;
<statement>;
END ...
<statement>;
Conditional Errors
• You are not testing all the conditions you
should be testing
– Some conditions aren’t caught and “fall
through”
• Your condition expressions are not correct
(you have a logical error…)
Common Loop Errors:
Off-by-One Loop
• Example: Sum of squares of numbers
Sum := 0;
FOR J := K TO N-K DO
Sum := Sum + Sqr(J);

– First value of J = K
– Last value of J = N-K
– The assignment at J = K is
Sum := Sqr(K)
– The assignment at J = N-K is
Sum := Prev.Sum + Sqr(N-K)
– At some small value of N=3 & K=1,
trace the loop execution (by hand or with the debugger)
Common Loop Errors:
Too Narrowly Defined Condition
• Example:
WHILE Balance <> 0.0 DO
Update (Balance)
BETTER:
WHILE Balance > 0.0 DO
Update (Balance)
• Don't use inequality for testing conditions,
especially with numbers.
– If Balance goes from negative to positive value without
having 0.0 as a value we will get an infinite loop.
• When using sentinel, make sure that its value can't
be confused with normal data item.
Common Loop Errors: Not
Updating the Loop Control Variable
• If a loop body have more than one statement, don't forget
the BEGIN-END brackets.
–Only REPEAT-UNTIL loop doesn't need a begin-end brackets.
• Example: (infinite loop)

WHILE Power <= 10000 DO


writeln('Next power of N is ', Power :6);
Power := Power * N;

• Don't use the REPEAT-UNTIL loop if you aren't sure that


the loop will have to be executed at least once.
• In a FOR loop if the starting value is greater (for TO) or
smaller than (for DOWNTO) the statement will not
execute.
Common Loop Errors
• Counter variable in a FOR loop should not
be changed inside the loop body.
– Example: what happens if you do
(RECTBAD1.PAS)
• It is illegal to use the same counter
variable in two nested FOR loops.
– Example: what happens if you do
(RECTBAD2.PAS)
• Unfortunately the Turbo Pascal
environment doesn’t check for you
Locating Runtime Errors with
‘PRINT’ Statements
1. Examine program output to determine which part of the
program is generating incorrect results
– Insert extra debugging statements (‘PRINT’ statements) to
display intermediate results at different points in your
program
– HOW? Insert extra writeln statements to trace the values of
certain critical variables during program execution
– In order to not add any problems be careful that you insert
extra writeln statement check if you need to add BEGIN-
END brackets
2. Focus on statements in that section to determine which
are at fault
3. When you locate the error, enclose the diagnostic
statement with comment braces
The Debugger
• Helps you execute your program in a
controlled fashion to help you find errors:
– Stepping through program
– Seeing output
– Watching the value of variables
– Running from breakpoint to breakpoint
• Prints diagnostics when run-time error occurs
• Indicates the statement that caused the error
and displays the values of the selected
variables
Stepped Program Execution
• Run Menu commands:
– F7: Trace into2
– F8: Step over
– F4: Go to cursor
– Run: to through run to the end
• Usually used in conjunction with output or
variable watching
• NOTE: F7 and F8 are hard to distinguish
sometimes
Watching Output During Execution
• Output command (Debug Menu):
– Opens output window at same time as
program window
– Allows seeing program running with tracing
commands (F4, F7, F8)
– Shows output as control moves through
program
Watching Variables & Expressions
• Watch:
– Can select several values whose values will
automatically be displayed after each
statement execution.
– Can type in an expression to be evaluated
based on variables in program
Executing with Breakpoints
• Causes the program to stop at selected
statements
• You can set several breakpoints at a program.
The program will execute directly from one
breakpoint to the next
• Good for large programs (when don’t want to
use F7, F8 or even F4).
• Signaled in Red/Brown – then in blue-green
when you get there.
• Run from breakpoint to breakpoint
Executing with Breakpoints [cont]
• Can add a conditional breakpoint
• If you do, make sure you remove
unconditional breakpoints at the same
place.
– Breakpoints : Delete

You might also like