#c #visual-studio-2008 #winapi #output-window
#c #visual-studio-2008 #winapi #окно вывода
Вопрос:
Используя Visual Studio 2008, я продолжаю видеть эту ошибку в окне вывода:
_CrtDbgReport: слишком длинная строка или ошибка ввода-вывода
У меня есть много TRACE
макросов, разбросанных по всему моему коду, используемых для сброса информации об условиях ошибки: путь к файлу, номер строки, ошибка и т.д. Мне нужно отследить источник этой ошибки, потому что, возможно, информация, которую он пытается сбросить в окно вывода, слишком длинная. Какую максимальную длину строки может принять TRACE
макрос? Вот пример того, как я обычно использую этот макрос:
TRACE(_T("CreateNotifyWindow : Failed to create handle for notify window thread.rntError: %drntFile: %srntLine: %drn"), ::GetLastError(), _T(__FILE__), __LINE__);
Любые мысли будут оценены. Спасибо.
Комментарии:
1. Это происходит потому, что ваш вывод содержит символы Юникода, которые недоступны для преобразования ANSI в окне вывода VS. Вы можете попробовать использовать
OutputDebugString
вместо этого, но это может привести к аналогичным проблемам.
Ответ №1:
В конечном счете, я готов поспорить, проблема заключается в передаче объектной строки вместо string.c_str() в макрос. ТРАССИРОВКА использует переменный аргумент, передаваемый, в конечном счете, чему-то, что вызывает что-то в семействе vsnprintf() для %s
обработки. Он не может обрабатывать объекты, потому что C
не может.
Максимальная длина OutputDebugString составляет 4K байт минус дробь из-за реализации.
Комментарии:
1. Ограничение на количество символов в
TRACE
макросе MFC равно 1023wchars
Ответ №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
Теперь вы можете увидеть правильную строку с широкими символами в окне вывода отладки.
Удачи!