使用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__);
任何想法都将不胜感激。感谢。
答案 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
现在,您可以在调试输出窗口中看到正确的宽字符串。 祝你好运!