C++和結構化異常處理
以下摘自《windows核心程式設計》,不做過多說明直接看程式碼吧。
#include "stdafx.h"
#include <windows.h>
using namespace std;
class Exception
{
public:
static void MapSEtoCE(void ) {_set_se_translator(TranslateSEtoCE); }
operator DWORD() { return er.ExceptionCode; }
private:
Exception(PEXCEPTION_POINTERS pep)
{
er = *pep->ExceptionRecord;
tx = *pep->ContextRecord;
}
static void _cdecl TranslateSEtoCE(UINT dwEC, PEXCEPTION_POINTERS pep)
{
throw Exception(pep );
}
private:
EXCEPTION_RECORD er;
CONTEXT tx;
};
int _tmain(int argc, _TCHAR* argv[])
{
Exception::MapSEtoCE();
try{
*(byte*)0 = 0; // Access violation
int x = 0;
x = 5 / x; // Division by zero
}
catch(Exception se)
{
switch(se)
{
case EXCEPTION_ACCESS_VIOLATION:
{
cout << "Access Violation" << endl;
}
break;
case EXCEPTION_INT_DIVIDE_BY_ZERO:
{
cout << "Division by zero" << endl;
}
break;
default:
{
cout << "Error code:" << se << " Unknown exception" << endl;
}
break;
}
}
return 0;
}
應該可以捕獲所有異常。包括已知的、未知的和無法預料的。
需要在setting中c/c++=> project option中新增 /EHa .否則.release時會初VC++優化掉
相關文章
- phptrycatch異常處理結構PHP
- 【C++】 C++異常捕捉和處理C++
- C++錯誤和異常處理C++
- C++ 異常處理C++
- C++異常處理C++
- c++異常處理格式C++
- c++ 異常處理(2)C++
- c++ 異常處理(1)C++
- c++異常處理 (轉)C++
- Windows核心讀書筆記——SEH結構化異常處理Windows筆記
- C++異常處理機制C++
- windows核心程式設計---未處理異常,向量化異常處理與C++異常Windows程式設計C++
- C++ 異常處理機制詳解:輕鬆掌握異常處理技巧C++
- C++異常處理機制核心觀點總結C++
- C++整理19_異常處理C++
- PHP錯誤處理和異常處理PHP
- 約束和異常處理
- 迭代器和異常處理
- 異常篇——異常處理
- Linux 下 C++ 異常處理技巧LinuxC++
- C++異常處理與臨時副本C++
- [轉][翻譯]深入理解Win32結構化異常處理(三)Win32
- [轉][翻譯]深入理解Win32結構化異常處理(一)Win32
- MySQL定義異常和異常處理詳解MySql
- 異常處理
- springboot下新增全域性異常處理和自定義異常處理Spring Boot
- Java 異常處理:使用和思考Java
- Java異常處理和設計Java
- MySQL遊標和異常處理MySql
- 【C++】 63_C語言異常處理C++C語言
- C++ 異常處理機制的實現C++
- C與C++中的異常處理 (轉)C++
- Python錯誤處理和異常處理(二)Python
- PHP 的異常處理之try和catch用法小結PHP
- Java 異常處理的誤區和經驗總結Java
- 異常-throws的方式處理異常
- 異常處理與異常函式函式
- JavaScript 異常處理JavaScript