J'ai une classe CExceptionHandler
appelée lorsque mon application détecte une exception d'exécution. Par exemple:Déchargement de données utiles pour la console sur exception interceptée
if (val == NULL)
{
TRACE(_T("Unexpected NULL in sequence."));
AfxThrowException(ERROR_INVALID_DATA);
}
AfxThrowException
est très simple:
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);
}
Ceci est la fonction membre Dump
de CExceptionHandler
:
void CExceptionHandler::Dump(CDumpContext & dc) const
{
CObject::Dump(dc);
dc << "m_dwError = " << m_dwError;
}
plus haut dans mon code que j'ai les déclarations 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");
}
Je voudrais que les informations de débogage collectées soient sauvegardées dans la console. Cependant, lorsque le PC entre dans l'instruction catch
(vérifiée avec le point d'arrêt), rien ne se passe sur la console. J'utilise Visual Studio 2008 en mode débogage. Les pensées sont appréciées. Merci.
Y at-il un résultat que vous lancez mémoire allouée dynamiquement? (Leaky.) – GManNickG
@GMan: Y at-il un résultat que vous utilisez "raison" au lieu de "résultat"? ':)' (Oh, et je pense que c'est MFC pour vous.Mais mon opinion sur la question est seulement de ouï-dire ...) – sbi
@sbi: Ha, bon. – GManNickG