ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

vs下调试程序时,把信息打印到输出窗口

2021-02-06 15:32:15  阅读:538  来源: 互联网

标签:va argptr TRACE format ATLTRACE 打印 vs 调试程序 const


转载:https://blog.csdn.net/cwj066/article/details/82423627

     https://stackoverflow.com/questions/20508086/getting-rid-of-atltracegeneral-category-shown-in-atltrace-output

方法一:写一个变参函数,把想要打印到输出窗口的信息传给函数,函数内部调用系统函数OutputDebugString(),就可以把调试信息打印到输出窗口。

void OutputDebugPrintf(const char* strOutputString,...)
{
    char strBuffer[4096] = {0};

    va_list vlArgs;
    va_start(vlArgs, strOutputString);
    _vsnprintf_s(strBuffer, sizeof(strBuffer) - 1, strOutputString, vlArgs);
    
    va_end(vlArgs);
    OutputDebugString(CA2W(strBuffer));
}

方法二:调用系统自带的库函数TRACE(),这个函数其实和printf()类似,只不过printf()这个是把信息输出到控制台窗口,而TRACE()这个函数是把信息输出到vs2010的输出窗口,方便编程人员调试用。

TRACE(“%s”, "no error, no warning");

TRACE(“%d”, 1024);

TRACE(“%d”, 520.1314);

TRACE(“%c”, 'U');

 

未验证方法2

其它:不想要这个信息

采用下面的方法,显示的信息变成:

问题:

After upgrading to VS2013 I started receiving all my ATLTRACE2 messages in a "() : atlTraceGeneral - My output" format.

e.g.

ATLTRACE(_T("This is my data: %d\n"), 124);

... shown as

dllmain.cpp(1121) : atlTraceGeneral - This is my data: 124

I don't need any additional info. Is here some way to get back to the previous format so that the output would be just

This is my data: 124

回答

The only working fix is to undef ATLTRACE under _DEBUG macro and implement trace by yourself. Guys at Microsoft recommended the same.

The solution looks like this:

1 #ifdef _DEBUG
2 #ifdef ATLTRACE 
3 #undef ATLTRACE
4 #undef ATLTRACE2
5 
6 #define ATLTRACE CustomTrace
7 #define ATLTRACE2 ATLTRACE
8 #endif // ATLTRACE
9 #endif // _DEBUG

with the following CustomTraces:

void CustomTrace(const wchar_t* format, ...)
{
    const int TraceBufferSize = 1024;
    wchar_t buffer[TraceBufferSize];

    va_list argptr; va_start(argptr, format);
    vswprintf_s(buffer, format, argptr);
    va_end(argptr);

    ::OutputDebugString(buffer);
}

void CustomTrace(int dwCategory, int line, const wchar_t* format, ...)
{
    va_list argptr; va_start(argptr, format);
    CustomTrace(format, argptr);
    va_end(argptr);
}

 

标签:va,argptr,TRACE,format,ATLTRACE,打印,vs,调试程序,const
来源: https://www.cnblogs.com/Toya/p/14381630.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有