zoukankan      html  css  js  c++  java
  • 关于C++异常机制的笔记(SEH, try-catch)

    昨天晚上加班解决了一个问题,是由于无法正确的捕获到异常导致的。刚开始用try-catch,但是没法捕获到异常;后面改成SEH异常才解决。因此今天将这个问题重新梳理了一遍,关于try-catch, SEH的基本知识,大家可以从MSDN(https://msdn.microsoft.com/en-us/library/4t3saedz(v=vs.100).aspx),或者自行查找亦可。 

    关于二者之间的使用区别,做了些小小的测试,代码如下(OK-捕获异常、FAILED-未捕获异常):

    void JsonTest()
    {
        char szJson[] = "{"val":1}";
        Json::Reader reader;
        Json::Value root;
        if (false == reader.parse(szJson, root, false))
        {
            DEBUGA(DBG_DEBUG, "return false, JSON parse FAILED.");
            return ;
        }
    
        int val = root["val"].asInt();
        string val2 = root["val"].asString();
    }
    
    void StrTest()
    {
        wstring strVal = L"a";
        strVal.at(10);
    }
    
    void NULLPtrTest()
    {
        int* p = NULL;
        *p = 1;
    }
    
    void ZeroTest()
    {
        int z = 0;
        double d = 100 / z;
        z = 100;
    }
    
    void OutRangeTest()
    {
        char arr[] = "abc";
        char c = arr[5];
    }
    
    void TryCatchTest()
    {
        try
        {
            JsonTest();        // OK
            StrTest();        // OK
            NULLPtrTest();    // FAILED
            ZeroTest();        // FAILED
            OutRangeTest();    // FAILED
        }
        catch (...)
        {
            MessageBox(0, L"try-catch", 0, 0);
        }
    }
    
    void SEHTest()
    {
        __try
        {
            JsonTest();        // OK
            StrTest();        // OK
            NULLPtrTest();    // OK
            ZeroTest();        // OK
            OutRangeTest();    // FAILED
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
            MessageBox(0, L"SEH", 0, 0);
        }
    }
    
    int main()
    {
        TryCatchTest();
        SEHTest();
        retrun 0;
    }

     

  • 相关阅读:
    Mysql常用函数总结(二)
    mysql百万的数据快速创建索引
    php 中的sprintf 坑
    php5.5之后新特性整理
    mysql实践总结
    php下载远程图片到本地
    搜藏一个php文件上传类
    Attribute基本介绍
    Fiddler4抓包工具使用教程一
    HTTP传输数据压缩
  • 原文地址:https://www.cnblogs.com/nchxmoon/p/5106215.html
Copyright © 2011-2022 走看看