Visual Studio输出窗口错误 - C ++

时间:2011-04-11 20:48:10

标签: c++ visual-studio-2008 winapi output-window

使用Visual Studio 2008,我在输出窗口中看到这个错误:

  

_CrtDbgReport:字符串太长或IO错误

我的代码中散布了很多TRACE宏,用于转储有关错误情况的信息:文件路径,行号,错误等。我需要追查此错误的来源,因为它可能是它试图转储到输出窗口的信息太长。 TRACE宏可以接受的字符串的最大长度是多少?以下是我通常如何使用此宏的示例:

TRACE(_T("CreateNotifyWindow : Failed to create handle for notify window thread.\r\n\tError: %d\r\n\tFile: %s\r\n\tLine: %d\r\n"), ::GetLastError(), _T(__FILE__), __LINE__);

任何想法都将不胜感激。感谢。

2 个答案:

答案 0 :(得分:4)

最后我敢打赌问题是将对象字符串而不是string.c_str()传递给宏。 TRACE使用variadic参数传递给最终在vsnprintf()系列中调用某些内容进行%s处理的东西。它无法处理对象,因为C不能。

由于实现,OutputDebugString的最大长度为4K bytes minus a fraction

答案 1 :(得分:2)

你遇到了和我一样的麻烦。 我在网上得到了这个问题的答案,并且 我检查了一下,效果很好。

// Inside your main header like stdafx.h, add the following include directive

#include <locale.h>


// And inside your main implementation such as InitInstance()
// of your CWinApp derived application class,
// you can put the following locale designation function.

#ifdef _DEBUG
_tsetlocale(LC_ALL, _T("korean")); // you should set the country code of yours
#endif // _DEBUG

现在,您可以在调试输出窗口中看到正确的宽字符串。 祝你好运!