@@ -813,7 +813,40 @@ We won't cover those details in this document, but here are some useful material
## Debugging, Testing and Analysis
TBD
Writing program is only the first step of the whole software development circle. If you want to write and maintain high-quality software, then you should also know how to debug, test and analyse you program efficiently.
### Debugging
You've written a program that complied and ran correctly on the first try. For all other times, there is debugging.
Novice programmers have a strong tendency to debug everything by inserting print statements throughout the code, but using a debugger is often much more productive.
[GDB](https://www.sourceware.org/gdb/), also known as GNU Debugger, is a debugger for several languages such as C and C++. It allows you to inspect what the program is doing at a certain point during execution.
We won't cover the basic usage of GDB here, but you can find a series of tutorials here:
-[Part 1: Getting started with the debugger](https://developers.redhat.com/blog/2021/04/30/the-gdb-developers-gnu-debugger-tutorial-part-1-getting-started-with-the-debugger#)
-[Part 2: All about debuginfo](https://developers.redhat.com/articles/2022/01/10/gdb-developers-gnu-debugger-tutorial-part-2-all-about-debuginfo#)
-[Part3: Learn how to use breakpoints](https://developers.redhat.com/articles/2022/11/08/introduction-debug-events-learn-how-use-breakpoints#what_is_a_breakpoint_)
Along with the [GDB-reference-card](https://users.ece.utexas.edu/~adnan/gdb-refcard.pdf).
### Unit Testing
There are several unit-testing frameworks you can use:
-[Google Test](https://github.com/google/googletest)(you might need to write some C++)
-[Unity](https://github.com/ThrowTheSwitch/Unity)
-[CUnit](https://cunit.sourceforge.net/)
### Dynamic Analysis
Dynamic analysis is the process of evaluating the program during its execution. It's useful to find runtime bugs such as memory leaks, stack buffer overflow, heap buffer overflow etc.
You can use these tools to help you diagnose your program: