From c615101dfd6a21e8a88354a2bfc51331b7360a28 Mon Sep 17 00:00:00 2001
From: Mactavish <maczhanchao@yahoo.com>
Date: Tue, 25 Apr 2023 10:04:20 +0200
Subject: [PATCH] update

---
 clang.md | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/clang.md b/clang.md
index c09f909..deb12cd 100644
--- a/clang.md
+++ b/clang.md
@@ -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:
+
+- [Sanitizers](https://github.com/google/sanitizers)
+- [Valgrind](https://valgrind.org/)
 
 ## References
 
-- 
GitLab