learncpp-3 调试

3 调试

3.1 语法和语义错误

  • 不符合C++语法的语句会产生语法错误(例如缺少分号/使用未声明变量/括号不匹配),编译器会捕捉语法错误
  • 语法没错但是运行结果不对称为语义错误/逻辑错误(分母为0/使用未初始化变量)

现代编译器可以检测到一些常见的逻辑错误,例如使用一个未初始化的变量。但是大部分逻辑错误编译器无法捕获

3.2 调试过程

  • 找到问题根因
  • 理解问题
  • 决定解决方法
  • 修复问题
  • 重新测试

3.3 调试策略

  • 代码检查
  • 运行程序并重现问题

3.4 基本调试手段

  • 注释代码
  • 验证代码流(在函数开头加上输出语句)

使用std::cerr而不是std::cout,因为cout是会缓存的,cerr是立即输出的

  • 输出变量或表达式的值

3.5 更多调试手段

  • 使用预处理指令来决定要不要输出调试语句
#include <iostream>
#define ENABLE_DEBUG // comment out to disable debugging
int main()
{
#ifdef ENABLE_DEBUG
std::cerr << "main() called\n";
#endif
    int x{ getUserInput() };
    std::cout << "You entered: " << x << '\n';
    return 0;
}
  • 使用logger将调试信息输出到日志文件
posted @   dengkang1122  阅读(8)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示