• 调试技巧


    1.调试标记

    为了避免在bug找到后,要删除调试代码,我们可以利用预处理器的选择编译功能,在需要调试时,将编译“开关”打开,故障解除后,将编译“开关”关闭。这样编译器在编译文件的时候,不会把不需要的调试代码编译成目标代码,减少了目标文件的大小。这里所说的“开关”就是起到一个调试标记的作用,常用的标识名是:DEBUG(注意,不能使用NDEBUG,这是C中的保留字)

    #define DEBUG
    #ifdef  DEBUG 
    //需要调试的代码
    #endif
    

    2.把变量和表达式转换成字符串

    在调试程序的过程中,往往需要输出一些变量和表达式的值,常规的方法可以这样实现:

    cout<<"i="<<i<<endl;
    cout<<"a+b="<<a+b<<end;
    

    下述方法可能使代码更简洁:

    1 #include <iostream>
    2 #define PR(E) cout<<#E<<E<<endl
    3 using namespace std;
    4 int main(void)
    5 {
    6      PR(i);
    7      PR(a+b);
    8      return 0;
    9 }

    3.C语言的assert()宏

    assert()是c语言中定义的一个调试宏,在C中的头文件是 <assert.h>,C++中的头文件是<cassert>

    当使用assert()时,给它传递一个参数,该参数是一个表示某个断言为真的表达式。预处理器会产生代码去判断这个断言的真假。如果断言为假,则发出一个错误信息告诉断言是什么并且终止程序

    //#define NDEBUG
    #include<cassert>
    int main()
    {
            int i=100;
            assert(i!=100);
    }
    

    允许结果:

    如果调试结束,可以在assert()宏前面插入#define NDEBUG 结束调试 

  • 相关阅读:
    swift 学习资源 大集合
    ACM:回溯,八皇后问题,素数环
    hibernate 批量处理数据
    CTR校准
    Android Handler Message总结一下
    使用腾讯电子邮件,邮箱的一部分是无法接收正常邮件的问题
    JS获得URL参数
    JSP 获取访问者真正的IP地址
    根据百度API获得经纬度,然后根据经纬度在获得城市信息
    oracle initialization or shutdown in progress解决方法
  • 原文地址:https://www.cnblogs.com/liujiangyi/p/2627875.html
Copyright © 2020-2023  润新知