東坡下載:內容最豐富最安全的下載站!

首頁IT技術軟件教程 → visual C++編譯異常分析及解決方法

visual C++編譯異常分析及解決方法

相關文章發(fā)表評論 來源:本站整理時間:2014/10/27 18:10:01字體大。A-A+

更多

作者:專題點擊:172次評論:0次標簽: visual c語言

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

代碼

struct EXCEPTION_REGISTRATION   

{   

EXCEPTION_REGISTRATION* prev;   

DWORD handler;   

int id;   

DWORD ebp;   

};  

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

VC++編譯函數(shù)時會為它生成兩部分數(shù)據(jù) 

a)異;卣{函數(shù) 

b)一個包含函數(shù)重要信息的數(shù)據(jù)結構,這些信息包括catch塊、這些塊的地址和這些塊所關心的異常的類型等等。我把這個結構稱為funcinfo,有關它的詳細討論也在下一節(jié)。

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

異常處理

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

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

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

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

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

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

  • Microsoft Visual Studio合集
  • Visual C++
  • visualbasic
Microsoft Visual Studio合集
(9)Microsoft Visual Studio合集

Microsoft Visual Studio作為一個基本完整的開發(fā)工具集,Microsoft Visual Studio為用戶提供了整個軟件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發(fā)環(huán)境(IDE)等等。所寫的目標代碼適用于微軟支持的所有平臺,適合各種編程人員使用。

...更多>>
Visual C++
(26)Visual C++

最全面的VC++合集,這里為有需要的用戶提供了從一些網上資源很少的舊版本到官方最新推出的新版本,所有你有需求的VC++版本,在這里都能夠直接找到,需要那些老版本的用戶可以直接通過這里進行下載。

...更多>>
  • Microsoft Visual C++ 4.2(支持Win

    10-20 / 221.1M

    推薦理由:作為VC1.52和VC6中間的一個過度版本,MicrosoftVisualC++4.2支持從16位版本到32為版本的穩(wěn)定過度,Microsof
  • microsoft visual c 2.0 32位(MFC

    10-20 / 160.8M

    推薦理由:作為VC系列第一個只發(fā)行32位的版本,microsoftvisualc2.0集成了MFC3.0,但是因為各種原因導致本版本的使用非
  • Microsoft Visual C++(vc6.0下載)6

    06-03 / 453.3M

    推薦理由:VC++.6.0.with.SP6小編親自安裝,并且運行無錯誤MicrosoftVisualC++(vc6.0下載)含中文和英文兩個版本。使用
  • VC++6.0經典插件系列7款打包

    10-21 / 39.0M

    推薦理由:說到VisualC++的插件,很多人只想到VisualAssist這款,現(xiàn)在為大家提供VC++6.0經典插件系列,包含了多種功能
  • boundschecker vc6綠色版(VC++6.0檢

    10-21 / 18.7M

    推薦理由:為了方便各位編程人員能夠更加簡單的找出自己的錯誤代碼,通過boundscheckervc6綠色版可以隨時查詢各種錯誤
  • sourcestyler c(C++代碼格式化)1.4

    10-21 / 8.3M

    推薦理由:很多編程人員在盡心一些代碼編輯的時候都是直接借用各種模板來進行修改,sourcestylerc++可以將各種C++代碼
visualbasic
(15)visualbasic

visual Basic是經常需要編程的人員都是需要使用到的,這里為你提供各種各樣的軟件的版本,同時也是為你免費的提供最新的vb控件補丁下載,在這里是可以免費的為你解決你需要各種Visual Basic版本問題,歡迎免費下載使用!

...更多>>
  • Microsoft Visual Basic6.0 中文企

    10-20 / 241.6M

    推薦理由:MicrosoftVisualBasic(R)6.0企業(yè)版是創(chuàng)建高性能解決方案的最有效的工具。其包含以下功能:創(chuàng)建超高速應用程序
  • vb6.0 win10版(Visual Basic win10

    10-24 / 241.6M

    推薦理由:vb6.0在現(xiàn)在的win10的系統(tǒng)上面很多的人也是需要下載以及使用的,如果你想在線的下載最新的vb6.0win10版,或者
  • Microsoft Visual Basic(vb6.0精簡

    10-20 / 102.3M

    推薦理由:MicrosoftVisualBasic6.0簡稱VB6.0,十分適合剛學編程語言的初學新手!這個版本目前來說是使用人數(shù)是最多的
  • Visual Basic 6.0 win8.1兼容版(vb

    10-24 / 241.6M

    推薦理由:VisualBasic6.0在個個版本上面都是有很多的人是需要使用到的,當然也是少不了現(xiàn)在還是有很多的人是在使用wi
  • Visual Basic 2008簡體中文版9.0 官

    10-21 / 1.60G

    推薦理由:VisualBasic2008簡體中文版其實也是VisualStudio2008,在VisualStudio2008里面包含了VisualBasic2008,現(xiàn)在
  • Microsoft Visual Basic 2015中文版

    10-20 / 2.58G

    推薦理由:MicrosoftVisualBasic2015就是vb8.0的版本,這個版本在現(xiàn)在還是有部分的人在使用的,同時這個版本最大的特色
更多精彩內容請點擊

visual studio

專題

擴展知識

相關評論

閱讀本文后您有什么感想? 已有 人給出評價!

  • 2791 喜歡喜歡
  • 2101 頂
  • 800 難過難過
  • 1219 囧
  • 4049 圍觀圍觀
  • 5602 無聊無聊
熱門評論
最新評論
發(fā)表評論 查看所有評論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數(shù): 0/500 (您的評論需要經過審核才能顯示)