CDumpContext
отправляет вывод в отладчик, а не в консоль (см. OutputDebugString
для получения дополнительной информации), и если вы работаете в отладчике Visual Studio, вывод появится в Вывод Окно.
Если вы также хотите отправить вывод на консоль, вы можете настроить CDumpContext
для записи в CFile
, передав указатель на объект CFile
в конструкторе CDumpContext
.
Если ваше приложение построено с опцией конфигурации «Использовать многобайтовый набор символов», вы можете использовать CStdioFile
для записи в stdout или stderr:
CStdioFile file(stdout);
CDumpContext dumpContext(&file);
ex->Dump(dumpContext);
Или, если вы хотите использовать afxDump
, вы можете установить его m_pFile
переменную-член напрямую (она объявлена public
). Например, вы можете поместить этот код в вашу main
функцию:
CStdioFile file(stdout);
afxDump.m_pFile = &file;
Но это не будет работать, если ваше приложение построено как Unicode, потому что строки должны быть преобразованы в многобайтовые для записи в stdout. Чтобы выполнить преобразование, напишите класс, который наследует CFile
:
class CDumpFile : public CFile
{
public:
virtual void Write(const void* lpBuf, UINT nCount);
};
void CDumpFile::Write(const void* lpBuf, UINT nCount)
{
// Construct string from array of wide chars
const wchar_t* p = static_cast<const wchar_t*>(lpBuf);
UINT len = nCount / sizeof(wchar_t);
CStringW str(p, len);
CStringA astr(str); // Convert wide char to multibyte
fputs((LPCSTR)astr, stdout); // Write multibyte string to stdout
}
и используйте его так:
CDumpFile file;
afxDump.m_pFile = &file;
Несколько других замечаний по поводу вашего кода:
Необходимо убедиться, что объект исключения удален в блоке catch
. Если ваш CExceptionHandler
класс наследует MFC CException
, вам следует вызвать ex->Delete()
. Если это не так, вам нужно delete ex
.
Я бы не советовал использовать префикс Afx
для собственных функций - на мой взгляд, вы должны учитывать это, зарезервировано для использования библиотекой MFC.
Надеюсь, это поможет!