Ошибка окна вывода Visual Studio - C ++ - PullRequest
2 голосов
/ 12 апреля 2011

Используя Visual Studio 2008, я постоянно вижу эту ошибку в окне вывода:

_CrtDbgReport: слишком длинная строка или ошибка ввода-вывода

У меня есть много макросов 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 ]

4 голосов
/ 12 апреля 2011

В конце концов, держу пари, что проблема заключается в передаче объектной строки вместо string.c_str () в макрос.TRACE использует переменные аргументы, передаваемые, в конечном счете, чему-то, что вызывает что-то в семействе vsnprintf () для обработки %s.Он не может иметь дело с объектами, потому что C не может.

Максимальная длина для OutputDebugString составляет 4 Кбайт минус дробь из-за реализации.

2 голосов
/ 28 августа 2011

У вас такие же проблемы, как и у меня.Я получил ответ на этот вопрос в Интернете и проверил его, который работал очень хорошо.

// 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

Теперь вы можете увидеть правильную строку широких символов в окне вывода отладки.Удачи!

...