我想知道在没有调试器的情况下,我需要集中精力调试c代码。有什么要找的?
一般来说,我会注意以下几点:
检查是否将正确的值和类型传递给函数。
查找未分配和未初始化的变量
检查函数语法和函数的使用是否正确。
检查返回值
检查锁的使用是否正确。
检查字符串终止
从函数返回可变堆栈内存
一错再错
正常语法错误
函数声明错误
任何结构化的方法都是非常值得赞赏的。

最佳答案

通过将适当的warning flags传递给编译器,大多数错误都会被发现。
然而,从原始列表中,点1, 5, 6、7, 8是非常值得检查的人,但是一些编译器/标志组合会拾取未处理的值、指向自动存储器的指针以及数组索引中的一个错误。
您可能需要查看mudflapvalgrindefence等内容,以捕获您不知道的运行时案例。您也可以尝试splint,以增强静态分析。
对于未经自动化的方面,尝试静态地跟踪特定情况下的程序流程,特别是角落情况,并向自己验证它似乎做了正确的事情。尝试编写unit tests/测试脚本。一定要像上面讨论的那样使用一些自动检查。
如果您的重点是在没有任何测试执行的情况下进行测试,splint可能是最好的开始。你想研究的技术叫做static code analysis

09-30 17:48
查看更多