C语言进阶-第八讲编写安全无错的代码 第八讲 代码的调试 凌 明 trio@seu.edu.cn 东南大学国家专用集成电路系统工程技术研究中心 www.cnasic.com 目 录 Bugs vs Debugging !! 断点,单步,变量的观察与修改,内存观察与修改,调用栈 Bug的定位 关注代码的层次与接口 关注内存的访问越界(堆栈溢出,缓冲区溢出,数组越界) 关注边界情况 Bug的修正 让代码检查自己的错误 利用断言 利用调试宏 参数的合法性检查 堆栈的监控(溢出?) 内存数据结构的监控(Audit) 调试信息的记录与输出 其他的方法和工具 代码检查(Code Review or Code Inspection) 编译器的警告与Lint工具 好的 Coding Style www.cnasic.com Bugs vs Debugging 没有Bug的就不是软件 核心的问题是: 怎样发现程序错误的根源? 怎样在软件中自动地查出这个错误? 怎样修正这个错误? 怎样避免这个错误? www.cnasic.com 初学者的困惑 在错误面前一筹莫展 拼命的单步,但却不知道该关心什么? 根本就不单步跟踪程序,或者不敢往下层函数 跟踪 总是发现编译器的“Bug”……