0% found this document useful (0 votes)
6 views

Computer Programming Lab 12

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

Computer Programming Lab 12

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 11

Department of Engineering Technology

Computer programming (CET-121)


Fall 2023

Lab 12
Objective:
Debugging Techniques in Programming
Student Information

Student Name

Student ID

Date

Assessment

Marks Obtained

Remarks

Signature

1
Lab 12: Debugging Techniques in Programming

Objective:

The main goal of this lab is to familiarize students with effective debugging techniques to identify

and correct errors and logic flaws in a program.

Importance of Debugging in the Software Development Process in C++:

Debugging is a crucial aspect of the software development process in C++ as it plays a pivotal role in

ensuring the reliability and correctness of a program. Even the most seasoned developers encounter

errors in their code, and effective debugging is essential for identifying and rectifying these issues.

Debugging not only helps in eliminating errors but also enhances the overall quality of the code,

making it more efficient and maintainable.

Common Types of Errors in C++:

1. Syntax Errors:

- Syntax errors occur when the code violates the rules of the C++ language. These errors are

typically detected by the compiler during the compilation phase. Examples include missing

semicolons, mismatched parentheses, or incorrect variable declarations.

2. Runtime Errors:

- Runtime errors occur during the execution of the program. They often lead to program crashes or

unexpected behavior. Examples include division by zero, accessing an out-of-bounds array element,

or dereferencing a null pointer.

3. Logic Errors:

- Logic errors are more subtle and challenging to detect. They occur when the program's logic is

flawed, leading to incorrect results. Examples include incorrect algorithm implementation, flawed

conditional statements, or improper loop control.

2
Key Debugging Tools in C++:

1. Print Statements:

- The use of print statements (e.g., `cout` statements) is a simple yet effective way to trace the flow

of the program and inspect variable values during runtime.

cout << "Debugging point A" << endl;

// Print variable values

cout << "Variable x: " << x << endl;

2. Debugging Environments (e.g., GDB):

- Debugging environments, such as GDB (GNU Debugger), provide advanced debugging features.

These include setting breakpoints, stepping through code, and inspecting variable values interactively.

gdb ./your_program

(gdb) break main

(gdb) run

3. Version Control Systems (e.g., Git):

- Version control systems like Git allow developers to track changes in their code base. This is

valuable for identifying when errors were introduced and for collaborating with other developers.

git commit -m "Fixed bug in function foo"

Common Debugging Techniques in C++:

a. Print Statements:
Using print statements, such as `cout` in C++, is a fundamental and straightforward method to

understand the flow of the program and inspect the values of variables at different points during

runtime.

Example:
#include <iostream>

Using namespace std;

3
int main() {

int x = 5;

cout << "Debugging point A" << endl;

// Print variable values

cout << "Variable x: " << x << endl;

// Your code logic

cout << "Debugging point B" << endl;

return 0;

Exercise:

Given a C++ program with logical errors, use print statements strategically to identify and correct

the issues.

#include <iostream>

Using namespace std;

int main() {

// Logical error 1: Incorrect variable initialization

int x = 5;

int y = 0;

// Logical error 2: Incorrect loop condition

for (int i = 0; i <= 5; ++i) {

// Logical error 3: Incorrect calculation

y = x * i;

// Print statements to debug

cout << "i: " << i << endl;

4
cout << "x: " << x << endl;

cout << "y: " << y << endl;

// Logical error 4: Incorrect output

cout << "Result: " << x + y << endl; }

// Logical error 5: Incorrect return statement

return 0;}

In this example:

1. Added print statements to display the values of variables (`i`, `x`, `y`) at different points in the

program.

2. Corrected the initialization of variables `x` and `y`.

3. Adjusted the loop condition to make it more suitable.

4. Corrected the calculation of the variable `y`.

5. Fixed the output statement to display the correct result.

6. Corrected the return statement.

By strategically placing print statements and analyzing the output, you can identify and correct logical

errors in your C++ program. Keep in mind that this is a simplified example, and in a real-world

scenario, you may encounter more complex issues that require a more in-depth debugging approach,

possibly using a debugger or more sophisticated logging techniques.

b. IDE Debugging Tools:


Integrated Development Environments (IDEs) provide powerful debugging tools that assist in

identifying and fixing errors more efficiently. Key features include setting breakpoints, stepping

through code, and inspecting variable values in real-time.

Example:
Using breakpoints in an IDE like Visual Studio Code:

1. Set a breakpoint by clicking in the gutter next to the line number.

5
2. Start debugging the program.

3. Execution will pause at the breakpoint, allowing you to inspect variable values.

Exercise: Debug a C++ program using breakpoints and step-by-step execution in your
preferred IDE.
#include <iostream>

Using namespace std;

int main() {

int x = 5;

int y = 0;

for (int i = 1; i <= 5; ++i) {

y = x * i;

cout << "i: " << i << endl;

cout << "x: " << x << endl;

cout << "y: " << y << endl;

cout << "Result: " << x + y << endl; }

return 0;}

To debug a C++ program using breakpoints and step-by-step execution in Dev C++, follow these

steps:

1. Open the Project:

- Open Dev C++.

- Open your C++ project.

2. Set a Breakpoint:

- Locate the line where you want to start debugging.

- Click on the left margin of the editor window at that line number. This sets a breakpoint.

3. Compile the Program with Debug Information:

- Ensure that you are compiling your program with debugging information. In Dev C++, this is

6
typically done by selecting a "Debug" build or ensuring that debugging information is included in

your compilation settings.

4. Start Debugging:

- Go to the "Run" menu and select "Start Debugging" or press F5.

5. Execution Pauses at Breakpoint:

- The program will start, and execution will pause at the line where you set the breakpoint.

6. Inspect Variables:

- You can now inspect the values of variables by hovering over them or by using the Watches

window.

7. Step through the Code:

- Use the debugging toolbar or the keyboard shortcuts to step through the code:

- Step Into (F7): Executes the current line and moves to the next line. If the current line is a

function call, it enters the function.

- Step Over (F8): Executes the current line. If the current line is a function call, it executes the

entire function and moves to the next line in the calling function.

- Step Out (Shift + F8): Executes the remaining lines of the current function and returns to the

calling function.

8. Continue Execution:

- If you want to run the program until the next breakpoint, select "Continue" from the debugging

toolbar or press F9.

9. Inspecting Call Stack:

- The call stack window shows you the current function calls. You can use this to trace the flow of

your program.

10. Watch Window:

- Use the Watch window to monitor the values of specific variables during execution.

7
11. Fix Issues:

- As you step through the code, you may identify the issues causing unexpected behavior. Fix them

and continue debugging until your program runs correctly.

12. Stop Debugging:

- Once you've fixed the issues, stop debugging by selecting "Stop Debugging" from the "Run"

menu or by pressing Shift + F5.

c. Logging:

Logging involves strategically placing log statements in the code to capture information about the

program's behavior during runtime. This can help track the flow of execution and identify unexpected

behavior.

Example:

#include <iostream>

#include <fstream>

void logMessage(const string& message) {

ofstream logFile("logfile.txt", ios::app);

logFile << message << endl;

logFile.close();}

int main() {

logMessage("Program started");

// Your code logic

logMessage("Debugging point reached");

return 0;}

Exercise: Implement logging in a C++ program and analyze the log output to identify and
fix issues.
#include <iostream>

8
#include <fstream>

Using namespace std;

// Logging function

void logMessage(const string& message) {

// Open the log file in append mode

ofstream logfile("logfile.txt", ios::app);

// Write the message to the log file

logfile << message << endl;

// Close the log file

logfile.close();}

int main() {

// Initialize variables

int x = 5;

int y = 0;

// Attempt to perform a division

logMessage("Attempting division...");

// Check for division by zero

if (y != 0) {

int result = x / y;

logMessage("Result: " + to_string(result));

} else {

logMessage("Error: Division by zero!"); }

return 0;}

9
Follow the steps below to compile and run this program in Dev C++:

1. **Open Dev C++:**

- Open Dev C++ and load your C++ project.

2. **Compile the Program:**

- Ensure that you are compiling the program with debugging information enabled.

3. **Run the Program:**

- Run the program from the Dev C++ environment.

4. **Check the Log File:**

- Open the `logfile.txt` and check for log messages.

The log file might look like this:

Attempting division...

Error: Division by zero!

By following these steps, you can implement logging in a C++ program using Dev C++, allowing

you to analyze log output to identify and fix issues.

Task:

Complete the following table:

Error Program Error Type Identify Error Debugging Corrected Program


technique
#include <iostream>
int main() {
cout << "Hello,
world!" << endl
return 0;}
#include <iostream>
int main() {
int x = 5;
int y = 0;
int result = x / y; //
Division by zero
cout << "Result: "
<< result << endl;
return 0;}

10
#include <iostream>
int main() {
int x = 5;
int y = 3;
int result = x * y; //
Incorrect
multiplication
cout << "Result: "
<< result << endl;
return 0;}

11

You might also like