?1?void?ExceptTest2()
?2?{
?3?????int?i?=?0;
?4?????int?*p?=?NULL;
?5?????__try
?6?????{
?7?????????__try
?8?????????{
?9?????????????__try
10?????????????{
11?????????????????__try
12?????????????????{
13?????????????????????__try
14?????????????????????{
15?????????????????????????*p?=?1;?//1.這里引發異常
16?????????????????????????i?=?10;
17?????????????????????}
18?????????????????????__finally
19?????????????????????{
20?????????????????????????i?=?11;?//4.全局展開第一步
21?????????????????????}
22?????????????????}
23?????????????????__finally
24?????????????????{
25?????????????????????i?=?8;?//5.全局展開第二步
26?????????????????}
27?????????????????i?=?9;??//這里不會被執行,因為全局展開完成后,將執行異常處理代碼
28?????????????}
29?????????????__except?(EXCEPTION_CONTINUE_SEARCH)//2.過濾器返回EXCEPTION_CONTINUE_SEARCH,繼續向上層查找
30?????????????{
31?????????????????i?=?1;?//因為過濾器表明不處理異常,所以這里也不會被執行
32?????????????}
33?
34?????????????i?=?2;??//這里不會被執行,因為全局展開完成后,將執行異常處理代碼
35?
36?????????????__try??
37?????????????{
38?????????????????i?=?5;?//這里不會被執行,因為全局展開完成后,將執行異常處理代碼
39?????????????}
40?????????????__finally
41?????????????{
42?????????????????i?=?6;?//這里不會執行(因為其對應的__try塊中沒有代碼被執行)
43?????????????}
44?????????}
45?????????__finally
46?????????{
47?????????????i?=?35;?//6.全局展開第三步
48?????????}
49?????}
50?????__except(EXCEPTION_EXECUTE_HANDLER)?//3.找到了異常處理塊,開始全局展開
51?????{
52?????????i?=?20;?//6.執行異常處理代碼
53?????}
54?????i=10;?//7.異常處理完成之后,指令指針到此
55?}