我应该使用哪个函数将文本输出到Visual Studio中的“输出”窗口?我尝试了printf(),但没有显示。
printf()
jucafojl1#
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); }
t9eec4r02#
如果这是调试输出,那么OutputDebugString就是你想要的。
#define DBOUT( s ) \ { \ std::ostringstream os_; \ os_ << s; \ OutputDebugString( os_.str().c_str() ); \ }
这允许您说这样的话:
DBOUT( "The value of x is " << x );
您可以使用__LINE__和__FILE__宏对此进行扩展,以给予更多信息。对于那些在Windows和宽字符区:
__LINE__
__FILE__
#include <Windows.h> #include <iostream> #include <sstream> #define DBOUT( s ) \ { \ std::wostringstream os_; \ os_ << s; \ OutputDebugStringW( os_.str().c_str() ); \ }
w7t8yxp53#
使用OutputDebugString函数或TRACE宏(MFC)可以进行printf样式的格式设置:
OutputDebugString
TRACE
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 );
smdncfj34#
有用的提示-如果您使用__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
sqyvllje5#
使用输出调试字符串而不是afxDump。示例:
#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("[...]")); }
cgfeq70w6#
#define WIN32_LEAN_AND_MEAN #include <Windows.h> wstring outputMe = L"can" + L" concatenate\n"; OutputDebugString(outputMe.c_str());
vkc1a9a27#
尽管OutputDebugString确实向调试器控制台打印了一个字符串,但在能够使用%表示法和可变数量的参数来格式化参数方面,它与printf并不完全相同,这是OutputDebugString所不能做到的。我认为_RPTF*N*系列宏(至少带有_CRT_WARN参数)在这种情况下是更好的选择--它将主字符串的格式设置为与printf非常相似,将结果写入调试器控制台。一个小的(在我看来也很奇怪的)警告是,它需要 * 至少一个参数 * 跟随在格式字符串之后(所有%都用于替换的那个),printf * 没有 * 受到这个限制。对于需要类似puts的功能--不需要格式化,只需按原样编写字符串--的情况,可以使用_RPTF0(它 * 忽略 * 第一个参数之后的参数,这是另一个奇怪的警告),当然也可以使用OutputDebugString。顺便说一句,还有从_RPT1到_RPT5的所有程序,但我还没有尝试过它们。老实说,我不明白为什么提供这么多程序来做本质上相同的事情。
%
_RPTF*N*
_CRT_WARN
puts
_RPTF0
_RPT1
_RPT5
7条答案
按热度按时间jucafojl1#
OutputDebugString函数将执行此操作。
示例代码
t9eec4r02#
如果这是调试输出,那么OutputDebugString就是你想要的。
这允许您说这样的话:
您可以使用
__LINE__
和__FILE__
宏对此进行扩展,以给予更多信息。对于那些在Windows和宽字符区:
w7t8yxp53#
使用
OutputDebugString
函数或TRACE
宏(MFC)可以进行printf
样式的格式设置:smdncfj34#
有用的提示-如果您使用
__FILE__
和__LINE__
,则将调试格式设置为:然后当你点击输出窗口中的那一行时,Visual Studio会直接跳到那一行代码。
我写了一篇关于这个的博客,所以我总是知道在哪里可以找到它:https://windowscecleaner.blogspot.co.nz/2013/04/debug-output-tricks-for-visual-studio.html
sqyvllje5#
使用输出调试字符串而不是afxDump。
示例:
cgfeq70w6#
vkc1a9a27#
尽管
OutputDebugString
确实向调试器控制台打印了一个字符串,但在能够使用%
表示法和可变数量的参数来格式化参数方面,它与printf
并不完全相同,这是OutputDebugString
所不能做到的。我认为
_RPTF*N*
系列宏(至少带有_CRT_WARN
参数)在这种情况下是更好的选择--它将主字符串的格式设置为与printf
非常相似,将结果写入调试器控制台。一个小的(在我看来也很奇怪的)警告是,它需要 * 至少一个参数 * 跟随在格式字符串之后(所有
%
都用于替换的那个),printf
* 没有 * 受到这个限制。对于需要类似
puts
的功能--不需要格式化,只需按原样编写字符串--的情况,可以使用_RPTF0
(它 * 忽略 * 第一个参数之后的参数,这是另一个奇怪的警告),当然也可以使用OutputDebugString
。顺便说一句,还有从
_RPT1
到_RPT5
的所有程序,但我还没有尝试过它们。老实说,我不明白为什么提供这么多程序来做本质上相同的事情。