美文网首页
MFC程序如何使用printf输出调试信息

MFC程序如何使用printf输出调试信息

作者: xhhjin | 来源:发表于2015-12-14 18:31 被阅读2071次

    设想一下,我们在win32控制台下写了个在命令行运行的程序库,图方便直接用printf输出log来进行调试,但后来集成库时使用了MFC之类的窗体程序,于是原先用printf输出的log信息都看不到了,但是我们又需要查看这些log信息,甚至最好能输出到文件来方便进行分析,如何处理?

    首先,我们考虑将log信息输出到控制台上,按照以下步骤操作。

    1,添加头文件
    #include <io.h>
    #include <fcntl.h>
    2,把下面的函数加到将要调用的文件中

     void InitConsoleWindow() 
     {  
            AllocConsole();     
            HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);    
            int hCrt = _open_osfhandle((long)handle,_O_TEXT);   
            FILE * hf = _fdopen( hCrt, "w" );   
            *stdout = *hf; 
    }
    

    3,在初始化函数中添加创建控制台的调用

    BOOL CHelloMFCDlg::OnInitDialog() 
    {   
            CDialog::OnInitDialog();    
            InitConsoleWindow(); // add 
            printf("str = %s\n ", "Debug output goes to terminal\n");   
            ...... 
    }
    

    调用此函数后会弹出一个Console,printf的信息就会出现在这上面,我们就可以查看log信息了。但是,如果log信息输出过多,Console上面就不能显示全部信息,这时我们便希望通过printf把log输出到一个固定的文件中,而这就要用到了输出的重定向。

    printf 重定向

    我们都知道,在windows终端输入"dir"会列出当前目录的文件列表,输入"dir > 1.txt"则可把当前目录的文件列表导出到"1.txt"中,linux终端也有类似命令"ls > 1.txt"。这里用到的就是输出的重定向,我们可以用同样的思路通过freopen来实现log信息的文件输出。

    先包含头文件,然后一句话就可以实现输出的重定向

    #include <stdio.h>
    #include <stdlib.h>
    freopen("log.txt", "w", stdout); //redirect stdout to log.txt
    

    返回正常的stdout输出

    freopen("CON", "w", stdout); //recover stdout(Windows)
    //freopen("/dev/console", "w", stdout); //recover stdout(Linux)
    

    也可以这样使用

    FILE *outbak = stdout;
    stdout = fopen("log.txt", "w");
    ......
    fclose(stdout);
    stdout = outbak;
    

    其实,stdin也有类似的重定向操作:

    freopen("info.txt", "r", stdin);    //redirect stdin to info.txt
    freopen("CON", "r", stdin);     //recover(Windows)
    //freopen("/dev/console", "r", stdin); //recover(Linux)
    

    上面的方法都是在代码已经写完的情况下,通过对printf进行的调整来避免大量重复的劳动。当然,为了避免这一切,最好的方法是在最初写代码的时候就定义一个log输出宏,后续都通过这个宏来调整log输出。

    原文地址:http://xuhehuan.com/2297.html

    相关文章

      网友评论

          本文标题:MFC程序如何使用printf输出调试信息

          本文链接:https://www.haomeiwen.com/subject/ibjuhttx.html