我想捕捉所有的异常,并返回相关的文字作物信息
try
{
...
}
catch(XXX)
{}
catch(...)
{
}对于最后一个catch,我如何得到原来的错误信息?

解决方案 »

  1.   

    呵呵,笨方法
    int i = 0;
    try
    {
    ...
    }
    catch(XXX)
    {
    i++;
    ...;
    记住错误;
    }
    catch(...)
    {
    i++;
    ...;
    记住错误;
    }if( i )
    {
        发送全部错误信息
        return;
    }
      

  2.   

    对应每一种异常,写异常类,并且用全局函数log,例如:
    try
    {}
    catch(xx e)
    {
    logerror1(xx e,.....);
    }
    catch(xx f)
    {
    logerror2(xx f,.....);
    }
      

  3.   

    log可以做成在窗体中显示,给logerror传一个参数,例如CListBox*,or CListCtrl*.
      

  4.   

    多谢各位,我的意思是:
    catch(...)能捕捉到我写程序时不能预料的异常,但是我想能不能当发生这些我不能预料的异常时,我能不能得到和这个异常相关的错误信息,以使我知道问题大概出在哪里
      

  5.   

    在你的异常类中记录啊!
    比如说你的异常类中有一个函数,两个成员!
    class CXXException:public CException{
    public:
       GetErrorMessage(CString xx);//xx记录异常内容及Error no
    private:
       int m_nError;        //记录Error number
       CString m_strMessage;//记录Error Message
    }
    CXXException::CXXException(char* pchMessage)
    {  
      m_strMessage = pchMessage;
      m_nError = GetLastError();
    }
    CXXException::GetErrorMessage(CString strErr)
    {
      //记录错误号及错误信息到参数strErr中
    }
    当你的函数发生异常时,抛出异常:
    if( false == connect(srv,port,...) )//"只是举个例子"
      throe new CXXException("连接出错!");
    这样在你的程序里:
    try{
    ...
    }
    catch(CXXException e)
    {
      logCXXException(参数一你要输出到的控件,参数二:e,...其它消息)
    }
    logCXXException是真正干活的,它把你想要的东西输出。
    太多了,太烦了,希望你能看得懂。。
      

  6.   

    谢谢楼上
    主要是用GetLastError(),对吧?
    如果我用的不是api,GetLastError()能返回错误吗?