Visual Studio에서 출력 창에 쓰는 방법은 무엇입니까? 출력하려면 어떤 함수를 사용해야합니까? 시도

Visual Studio의 “출력”창에 텍스트를 출력하려면 어떤 함수를 사용해야합니까?

시도 printf()했지만 표시되지 않습니다.



답변

OutputDebugString 함수가이를 수행합니다.

예제 코드

    void CClass::Output(const char* szFormat, ...)
{
    char szBuff[1024];
    va_list arg;
    va_start(arg, szFormat);
    _vsnprintf(szBuff, sizeof(szBuff), szFormat, arg);
    va_end(arg);

    OutputDebugString(szBuff);
}

답변

이것이 디버그 출력 인 경우 OutputDebugString 이 원하는 것입니다. 유용한 매크로 :

#define DBOUT( s )            \
{                             \
   std::ostringstream os_;    \
   os_ << s;                   \
   OutputDebugString( os_.str().c_str() );  \
}

이렇게하면 다음과 같이 말할 수 있습니다.

DBOUT( "The value of x is " << x );

더 많은 정보를 제공하기 위해 __LINE____FILE__매크로를 사용하여이를 확장 할 수 있습니다 .

Windows 및 와이드 캐릭터 랜드 사용자 :

#include <Windows.h>
#include <iostream>
#include <sstream>

 #define DBOUT( s )            \
{                             \
   std::wostringstream os_;    \
   os_ << s;                   \
   OutputDebugStringW( os_.str().c_str() );  \
}

답변

다음과 같이 형식을 지정할 수 있는 OutputDebugString함수 또는 TRACE매크로 (MFC)를 사용합니다 printf.

int x = 1;
int y = 16;
float z = 32.0;
TRACE( "This is a TRACE statement\n" );
TRACE( "The value of x is %d\n", x );
TRACE( "x = %d and y = %d\n", x, y );
TRACE( "x = %d and y = %x and z = %f\n", x, y, z );

답변

유용한 팁- 디버그를 다음 __FILE____LINE__같이 사용 하고 포맷 하는 경우 :

"file(line): Your output here"

그런 다음 출력 창에서 해당 줄을 클릭하면 Visual Studio가 해당 코드 줄로 직접 이동합니다. 예 :

#include <Windows.h>
#include <iostream>
#include <sstream>

void DBOut(const char *file, const int line, const WCHAR *s)
{
    std::wostringstream os_;
    os_ << file << "(" << line << "): ";
    os_ << s;
    OutputDebugStringW(os_.str().c_str());
}

#define DBOUT(s)       DBOut(__FILE__, __LINE__, s)

나는 이것에 대한 블로그 게시물을 썼기 때문에 나는 그것을 찾을 수있는 곳을 항상 알았다 :
https://windowscecleaner.blogspot.co.nz/2013/04/debug-output-tricks-for-visual-studio.html


답변

afxDump 대신 OutputDebugString을 사용하십시오.

예:

#define _TRACE_MAXLEN 500

#if _MSC_VER >= 1900
#define _PRINT_DEBUG_STRING(text) OutputDebugString(text)
#else // _MSC_VER >= 1900
#define _PRINT_DEBUG_STRING(text) afxDump << text
#endif // _MSC_VER >= 1900

void MyTrace(LPCTSTR sFormat, ...)
{
    TCHAR text[_TRACE_MAXLEN + 1];
    memset(text, 0, _TRACE_MAXLEN + 1);
    va_list args;
    va_start(args, sFormat);
    int n = _vsntprintf(text, _TRACE_MAXLEN, sFormat, args);
    va_end(args);
    _PRINT_DEBUG_STRING(text);
    if(n <= 0)
        _PRINT_DEBUG_STRING(_T("[...]"));
}

답변

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

wstring outputMe = L"can" + L" concatenate\n";
OutputDebugString(outputMe.c_str());

답변

OutputDebugString실제로 디버거 콘솔에 문자열을 인쇄 하지만 printf후자가 %표기법과 가변 개수의 인수를 사용하여 인수를 형식화 할 수 있다는 점 과 는 정확히 같지 OutputDebugString않습니다.

나는 적어도 인수가 있는 _RPTFN매크로 _CRT_WARN가이 경우에 더 나은 구혼 자라고 주장 할 것입니다. 즉, printf디버거 콘솔에 결과를 기록하는 것처럼 주 문자열을 형식화합니다 .

그것에 대한 사소한 (그리고 이상한, 내 생각에) 경고 는 형식 문자열 다음 에 적어도 하나의 인수 가 필요하다는 것 입니다 (모두 %for 대체를 가진 인수 ), 제한 printf이 발생하지 않습니다 .

puts유사한 기능 이 필요한 경우 ( 형식 지정없이 문자열을 그대로 작성하는 경우) 형제가 있습니다 _RPTF0(형식 문자열 다음에 오는 인수를 무시하는 또 다른 이상한 경고). 또는 OutputDebugString물론.

그건 그렇고, 또한 거기에서 모든 것 _RPT1_RPT5하지만 난 그들을 시도하지 않았습니다. 솔직히, 왜 그렇게 많은 절차를 기본적으로 모두 동일한 작업을 수행하는지 이해하지 못합니다.