Debugging
Once errorsare identified:
◦ it is necessary to identify the precise location of the errors
and to fix them.
Each debugging approach has its own advantages and
disadvantages:
◦ each is useful in appropriate circumstances.
3.
Some Debugging Approaches
•Brute Force method
• Symbolic Debugger
• Backtracking
• Cause-Elimination Method
• Program Slicing
3
4.
Brute-force method
Thisis the most common method of debugging:
◦ least efficient method.
◦ program is loaded with print statements
◦ print the intermediate values
◦ hope that some of printed values will help identify the
error.
5.
Symbolic Debugger
Bruteforce approach becomes more systematic:
◦ with the use of a symbolic debugger,
◦ symbolic debuggers get their name for historical reasons
◦ early debuggers let you only see values from a program
dump:
determine which variable it corresponds to.
6.
Symbolic Debugger
Usinga symbolic debugger:
◦ values of different variables can be easily checked and
modified
◦ single stepping to execute one instruction at a time
◦ break points and watch points can be set to test the
values of variables.
7.
Backtracking
This isa fairly common approach.
Beginning at the statement where an error
symptom has been observed:
◦ source code is traced backwards until the error is
discovered.
Backtracking
Unfortunately, asthe number of source lines to be
traced back increases,
◦ the number of potential backward paths increases
◦ becomes unmanageably large for complex programs.
10.
Cause-elimination method
Inthis method, once a failure is observed, the
symptoms of the failure (e.g. certain variable is having a
negative value though it should be positive) are noted.
Determine a list of causes:
◦ which could possibly have contributed to the error symptom.
◦ tests are conducted to eliminate each.
A related technique of identifying errors by examining
error symptoms:
◦ software fault tree analysis.
11.
Program Slicing
Thistechnique is similar to back tracking.
However, the search space is reduced by defining
slices.
A slice is defined for a particular variable at a
particular statement:
◦ set of source lines preceding this statement which can
influence the value of the variable.
12.
Program Slicing cont…
Slice of a program w.r.t. program point p and
variable x:
- All statements and predicates that might
affect the value of x at point p.
<p, x> known as slicing criterion.
13.
Example
1 main( )
2{
3 int i, sum;
4 sum = 0;
5 i = 1;
6 while(i <= 10)
7 {
8 Sum = sum + 1;
9 ++ i;
10 }
11 printf(“%d”, sum);
12 printf(“%d”, i);
13 }
An Example Program & its backward slice w.r.t. <12, i>
Example
1. int main(){
2. int i, s;
3. i=1;
4. s=1;
5. while(i<=10){
6. s=s+i;
7. i++;}
8. printf(“%d”,s);
9. printf(“%d”,i);
10. }
An Example Program
& its slice w.r.t. <9, i>
16.
Types of Slices
StaticSlice: Statements that may affect value of a variable at
a program point for all possible executions.
Dynamic Slice: Statements that actually affect value of a
variable at a program point for that particular execution.
Backward Slice: Statements that might have affected the
variable at a program point.
Forward Slice: Statements that might be affected by the
variable at a program point.
17.
Example of ForwardSlice
1 main( )
2 {
3 int i, sum;
4 sum = 0;
5 i = 1;
6 while(i <= 10)
7 {
8 sum = sum + 1;
9 ++ i;
10 }
11 printf(“%d”, sum);
12 printf(“%d”, i);
13 }
An Example Program & its forward slice w.r.t. <5, i>
18.
Types of Slicescont …
Intra-Procedural Slice: for programs having only
one procedure
◦ Not applicable for OOPs
Inter-Procedural Slice: for programs having
more than one procedure
◦ Applicable for OOPs
19.
Applications of Slicing
Debugging
Program understanding
Testing
Software maintenance
Complexity measurement
Program integration
Reverse engineering
Software reuse
20.
Debugging Guidelines
Debuggingusually requires a thorough
understanding of the program design.
Debugging may sometimes require full redesign of
the system.
A common mistake novice programmers often
make:
◦ not fixing the error but the error symptoms.
21.
Debugging Guidelines
Beaware of the possibility:
◦ an error correction may introduce new errors.
After every round of error-fixing:
◦ regression testing must be carried out.
22.
Program Analysis Tools
An automated tool:
◦ takes program source code as input
◦ produces reports regarding several important
characteristics of the program,
◦ such as size, complexity, adequacy of commenting,
adherence to programming standards, etc.
23.
Program Analysis Tools
Some program analysis tools:
◦ produce reports regarding the adequacy of the test cases.
There are essentially two categories of program
analysis tools:
◦ Static analysis tools
◦ Dynamic analysis tools
24.
Static Analysis Tools
Static analysis tools:
◦ Assess properties of a program without executing it.
◦ Analyze the source code
provide analytical conclusions.
25.
Static Analysis Tools
Whether coding standards have been adhered to?
◦ Commenting is adequate?
Programming errors such as:
◦ uninitialized variables
◦ mismatch between actual and formal parameters.
◦ Variables declared but never used, etc.
26.
Static Analysis Tools
Code walk through and inspection can also be
considered as static analysis methods:
◦ however, the term static program analysis is generally used
for automated analysis tools.
27.
Dynamic Analysis Tools
Dynamic program analysis tools require the
program to be executed:
◦ its behaviour recorded.
◦ Produce reports such as, extent of coverage achieved,
adequacy of test cases, etc.
28.
Summary
Discussed differentdebugging approaches.
◦ Brute Force method
◦ Symbolic Debugger
◦ Backtracking
◦ Cause-Elimination Method
◦ Program Slicing
Presented some debugging guidelines.
Explained the Program Analysis Tools
◦ Static analysis tools
◦ Dynamic analysis tools 28