【问题标题】:Allow printf through DEBUG flags通过 DEBUG 标志允许 printf
【发布时间】:2014-11-08 19:59:30
【问题描述】:

如果我使用-g 标志(g++ 编译器)编译源文件,我想执行“一堆代码”,我在想这样的事情:

int main()
{
    // do some calculations...
    #if DEBUG
        fputs("MATRIX:\n", stdout);
        Print_Matrix(A, M, N);

        fputs("VECTOR:\n", stdout);
        Print_Vector(x, N);

        fputs("PARALLEL RESULT\n", stdout);
        Print_Vector(y, M);

        fputs("SERIAL RESULT\n", stdout);

        Print_Vector(y_serial, M);

    #else
        fprintf(stdout, "SIZE: %d x %d AND %d THREADS\n", M, N, NUM_OF_THREADS);
        fprintf(stdout, "TIEMPO CONC.:%d mseg\n", (int)final_par);
        fprintf(stdout, "TIEMPO SERIAL:%d mseg\n", (int)final_serial);
    #endif
}

目的是当矩阵的大小很小的时候我会在DEBUG模式下运行,如果不是,那么我会打印执行时间(对于更大的矩阵)。

问题是:无论是否使用-g 标志编译它,它都不会打印有关矩阵或向量的信息。

【问题讨论】:

  • 添加-DDEBUG 选项。
  • 你试过用-g -DDEBUG=1编译吗?
  • -g 并不神奇。它没有默默地定义任何宏(那太可怕了)。它只在二进制文件中生成调试信息。您需要自己添加宏。
  • 我不确定这是不是重复的@Barry,你能详细说明一下吗? :)

标签: c++ c debugging macros


【解决方案1】:

如果您使用DEBUG 作为标志进行编译,您将执行printf(),如果不是fprintf()

请注意,-g 不是这里要重点关注的,因为它只会生成调试信息,我们稍后可以通过调试器利用这些信息。


检查这个简单的例子。

px.c

#include <stdio.h>

int main(void)
{
    #if DEBUG
        printf("Somewhere DEBUG was feeded to this program\n");
    #else
        printf("Somewhere DEBUG was NOT feeded to this program\n");
    #endif
    return 0;
}

执行:

samaras@samaras-A15:~$ gcc -Wall px.c -o myexe
samaras@samaras-A15:~$ ./myexe
Somewhere DEBUG was NOT feeded to this program

samaras@samaras-A15:~$ gcc -Wall -DDEBUG px.c -o myexe
samaras@samaras-A15:~$ ./myexe
Somewhere DEBUG was feeded to this program

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-12
    • 2016-06-20
    • 2017-01-04
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2021-09-15
    相关资源
    最近更新 更多