# c-cpp-debug-demos **Repository Path**: rongqi1108/c-cpp-debug-demos ## Basic Information - **Project Name**: c-cpp-debug-demos - **Description**: gdb asan valgrind - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-20 - **Last Updated**: 2025-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # C/C++ Debug Demos 本仓库包含了多个用于演示常见C/C++程序错误以及如何使用调试工具(如 ASan、GDB、Valgrind)识别和解决这些问题的示例。 ## 目录结构 - `asan/`: 包含 AddressSanitizer 示例,用于检测内存错误。 - `1.heap_overflow/`: 堆溢出。 - `2.stack_overflow/`: 栈溢出。 - `3.use_after_free/`: 使用已释放内存。 - `4.memory_leak/`: 内存泄漏。 - `5.global_overflow/`: 全局变量溢出。 - `6.double_free/`: 双重释放内存。 - `gdb/`: 包含 GDB 调试示例。 - `1.loop/`: 简单的循环错误示例。 - `2.swap/`: 交换变量的错误实现。 - `3.core/`: 产生和调试 core dump 文件的示例。 - `valgrind/`: 包含 Valgrind 示例,特别是 Memcheck 工具。 - `1.leak/`: 检查内存泄漏。 - `2.not_initialized/`: 使用未初始化的内存。 - `3.output to log/`: 将 Valgrind 输出保存到日志文件。 - `4.invaild_write_read/`: 无效的读写操作。 - `5.overlap/`: 内存重叠问题。 - `6.badmalloc/`: 错误的内存分配。 ## 调试工具简介 - **ASan (AddressSanitizer)**: 一个快速的内存错误检测工具,能检测堆栈溢出、内存泄漏、双重释放等。 - **GDB (GNU Debugger)**: 用于调试运行中的程序,可以设置断点、查看内存、堆栈等。 - **Valgrind (Memcheck)**: 用于检测内存管理问题,如泄漏、越界访问、未初始化内存使用等。 ## 如何使用 对于每个子目录中的示例,您可以根据具体的调试工具编译并运行程序,观察其行为并使用相应工具进行分析。 ### 编译与运行 (ASan 示例) 例如,在 `asan/1.heap_overflow` 目录中: ```bash g++ -fsanitize=address -g heap_overflow.cpp -o heap_overflow ./heap_overflow ``` ### 使用 GDB 调试 进入 `gdb/2.swap` 目录: ```bash gdb ./swap (gdb) break main (gdb) run (gdb) step ``` ### 使用 Valgrind 检查内存问题 进入 `valgrind/1.leak` 目录: ```bash valgrind --leak-check=yes ./leak ``` ## 参考资料 - [GDB 教程](https://sourceware.org/gdb/current/onlinedocs/gdb/) - [Valgrind 官方文档](https://valgrind.org/docs/manual/manual.html) - [ASan 文档](https://github.com/google/sanitizers/wiki/AddressSanitizer) ## License 本项目使用 MIT License,请查看 `LICENSE` 文件获取详细条款。 ## 参与贡献 如果您有兴趣添加更多调试示例或改进现有内容,请 fork 此仓库并提交 pull request。 --- 希望这些示例能帮助您更好地理解和调试 C/C++ 中的常见错误!