成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

VC++編譯異常相關說明

開發 后端
VC++是微軟公司開發的一個IDE(集成開發環境),換句話說,就是使用c++的一個開發平臺,但是有時會出現VC++編譯異常的現象。

要想學習好VC必須具備良好的C/C++的基礎,必要的英語閱讀能力也是必不可少的,因為大量的技術文檔多以英文形式發布,否則就會導致VC++編譯異常,這大大的影響了程序員的效率。

回憶一下我在第一節中介紹的EXCEPTION_REGISTRATION結構,我們曾用它向操作系統注冊了發生異常時要被調用的回調函數。VC++也是這么做的,不過它擴展了這個結構的語義,在它的后面添加了兩個新字段:

  1. struct EXCEPTION_REGISTRATION   
  2. {   
  3.     EXCEPTION_REGISTRATION* prev;   
  4.     DWORD handler;   
  5.     int id;   
  6.     DWORD ebp;   
  7. };  

VC++編譯異常會為絕大部分函數③添加一個EXCEPTION_REGISTRATION類型的局部變量,它的最后一個字段(ebp)與棧楨指針指向的位置重疊。函 數的序言創建這個結構并把它注冊給操作系統,尾聲則恢復主調函數的EXCEPTION_REGISTRATION。id字段的意義我將在下一節介紹。

VC++編譯函數時會為它生成兩部分數據:
a)異?;卣{函數
b)一個包含函數重要信息的數據結構,這些信息包括catch塊、這些塊的地址和這些塊所關心的異常的類型等等。我把這個結構稱為funcinfo,有關它的詳細討論也在下一節。

是考慮了異常處理之后的運行時堆棧。widget的異?;卣{函數位于由FS:[0]指向的異常處理鏈的開始位置(這是由widget的序言設置的)。

異常處理程序把widget的funcinfo結構的地址交給函數__CxxFrameHandler,__CxxFrameHandler會檢查這個結 構看函數中有沒有catch塊對當前的異常感興趣。

如果沒有的話,它就返回ExceptionContinueSearch給操作系統,于是操作系統會從 異常處理鏈表中取得下一個結點,并調用它的異常處理程序(也就是調用當前函數的那個函數的異常處理程序)。

這一過程將一直進行下去——直到處理程序找到一個能處理當前異常的catch塊為止,這時它就不再返回操作系統了。但是在調用catch塊之前(由于有 funcinfo結構,所以知道catch塊的入口,參見圖3),必須進行堆棧展開,也就是清理掉當前函數的棧楨下面的所有其他的棧楨。這個操作稍微有點 復雜。

因為:異常處理程序必須找到異常發生時生存在這些棧楨上的所有局部對象,VC++編譯異常并依次調用它們的析構函數。后面我將對此進行詳細介紹。 異常處理程序把這項工作委托給了各個棧楨自己的異常處理程序。從FS:[0]指向的異常處理鏈的第一個結點開始,它依次調用每個結點的處理程序,告訴它堆 棧正在展開。

與之相呼應,這些處理程序會調用每個局部對象的析構函數,然后返回。此過程一直進行到與異常處理程序自身相對應的那個結點為止。 由于catch塊是函數的一部分,所以它使用的也是函數的棧楨。因此,在調用catch塊之前,異常處理程序必須激活它所隸屬的函數的棧楨。

其次,每個catch塊都只接受一個參數,VC++編譯異常其類型是它希望捕獲的異常的類型。異常處理程序必須把異常對象本身或者是異常對象的引用拷貝到catch塊的棧 楨上,編譯器在funcinfo中記錄了相關信息,處理程序根據這些信息就能知道到哪去拷貝異常對象了。

【編輯推薦】

  1. C與C++中標準輸入實現方式上的一點區別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設計的基本構思與方法
  4. 玩轉C++語言的幾種方法
  5. 如何更好的進行C++代碼編制
責任編輯:chenqingxiang 來源: NET130
相關推薦

2010-01-28 15:56:38

VC++ 6.0編譯

2010-01-27 17:42:58

VC++開發環境

2010-02-01 15:41:55

擴展Python

2010-01-22 10:44:10

VC++應用程序

2010-06-09 17:20:05

Mrtg window

2010-02-01 17:41:54

Python 解釋器

2010-02-01 16:32:49

Python腳本

2009-12-31 14:50:57

ADO組件

2009-12-25 15:57:14

ADO調用

2009-12-24 15:42:01

ADO類庫

2009-12-29 16:33:35

ADO.Net Tea

2010-01-05 17:35:09

JSON數組格式

2010-01-08 14:48:26

Javascritp處

2010-01-12 18:06:58

VC環境

2009-12-23 09:26:56

ADO.NET屬性

2010-01-21 17:22:21

VC++

2011-07-03 16:19:19

2010-01-07 09:31:27

Json數據異常

2010-01-26 13:29:46

VC++應用程序

2011-07-13 11:20:55

VC++ODBC
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99综合在线 | 丝袜 亚洲 欧美 日韩 综合 | 免费黄色片在线观看 | 欧美一区二 | 日韩在线免费观看视频 | 国产欧美日韩一区二区三区在线 | 91在线免费观看网站 | 成人日韩av | 色婷婷综合在线观看 | 精品三级在线观看 | 国产一级黄色网 | 午夜精品久久久久久久久久久久久 | 91欧美精品成人综合在线观看 | 精品一二区 | 成人精品国产免费网站 | 国产美女在线精品免费 | 亚洲激情综合 | 91精品在线看 | 蜜桃av一区二区三区 | 一级片视频免费 | 日韩av在线一区 | 在线观看中文字幕 | 久久久精品国产 | 亚洲一区 中文字幕 | 日日干夜夜操 | 五月花丁香婷婷 | 国产成人免费一区二区60岁 | 日韩在线免费 | 天天综合网91 | 中文字幕国产视频 | av一级| 日日操天天射 | 天天操综合网站 | 56pao在线 | 国产一级淫片a直接免费看 免费a网站 | 在线日韩欧美 | 欧美另类视频 | 成人久久18免费网站图片 | 超碰免费在线 | av网站在线播放 | 久久精品99 |