昨天晚上加班解决了一个问题,是因为没法正确的捕获到异常致使的。刚开始用try-catch,可是无法捕获到异常;后面改为SEH异常才解决。所以今天将这个问题从新梳理了一遍,关于try-catch, SEH的基本知识,你们能够从MSDN(https://msdn.microsoft.com/en-us/library/4t3saedz(v=vs.100).aspx),或者自行查找亦可。 测试
关于两者之间的使用区别,作了些小小的测试,代码以下(OK-捕获异常、FAILED-未捕获异常):spa
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; }