【发布时间】:2010-11-09 22:41:11
【问题描述】:
我有一个CExceptionHandler 类,只要我的应用程序检测到运行时异常,就会调用它。例如:
if ( val == NULL )
{
TRACE(_T("Unexpected NULL in sequence."));
AfxThrowException( ERROR_INVALID_DATA );
}
AfxThrowException很简单:
void AfxThrowException( DWORD error )
{
CExceptionHandler * pException = NULL;
if ( error == 0 )
{
error = ::GetLastError();
}
pException = new CExceptionHandler( error );
TRACE(_T("Warning: throwing CSerialException for error %d\n"), error);
THROW(pException);
}
这是CExceptionHandler的成员Dump函数:
void CExceptionHandler::Dump( CDumpContext & dc ) const
{
CObject::Dump(dc);
dc << "m_dwError = " << m_dwError;
}
在我的代码中,我有 try/catch 语句:
try
{
/* My app does stuff where the exception is thrown. */
}
catch( CExceptionHandler * ex )
{
afxDump << _T("Dumping exceptional data: ") << _T("\r\n");
ex->Dump( afxDump );
afxDump << _T("\r\n");
}
我希望将收集到的调试信息转储到控制台。但是,当 PC 进入 catch 语句(使用断点验证)时,控制台上没有任何反应。我在调试模式下使用 Visual Studio 2008。想法受到赞赏。谢谢。
【问题讨论】:
-
您是否会抛出动态分配的内存? (泄漏。)
-
@GMan:有没有你使用“原因”而不是“结果”的结果?
:)(哦,我认为这对你来说是 MFC。但我对此事的看法只是传闻......) -
控制台?这不是MFC吗?试试输出窗口。
-
@Hans Passant:
CExceptionHandler是 MFC (.dll),但应用程序 (.exe) 不是(Win32 控制台项目)。 -
嗨,吉姆,我已经根据您的评论更新了我的答案。
标签: c++ visual-studio-2008 mfc exception-handling console-application