東坡下載:內(nèi)容最豐富最安全的下載站!

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

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

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

更多

作者:專題點擊:172次評論:0次標(biāo)簽: visual c語言

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

代碼

struct EXCEPTION_REGISTRATION   

{   

EXCEPTION_REGISTRATION* prev;   

DWORD handler;   

int id;   

DWORD ebp;   

};  

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

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

a)異常回調(diào)函數(shù) 

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

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

異常處理

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

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

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

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

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

其次,每個catch塊都只接受一個參數(shù),VC++編譯異常其類型是它希望捕獲的異常的類型。異常處理程序必須把異常對象本身或者是異常對象的引用拷貝到catch塊的棧 楨上,編譯器在funcinfo中記錄了相關(guān)信息,處理程序根據(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)等等。所寫的目標(biāo)代碼適用于微軟支持的所有平臺,適合各種編程人員使用。

...更多>>
  • visual studio 2017 15.3正式版免費

    08-15 / 1.49G

    推薦理由:VisualStudio201715.3正式版本下載,visualstudio2017簡稱VS2017,這是微軟推出的開發(fā)工具,包含VisualC#、
  • visual studio enterprise 2017激活

    05-22 / 800KB

    推薦理由:visualstudioenterprise2017激活密鑰破解版是一款微軟的編程工具,相信很多編程人員都在用,給大家提供最新
  • Microsoft Visual Studio 2005簡體

    12-26 / 2.54G

    推薦理由:Visual對一個學(xué)計算機的人來說應(yīng)該不會沒有聽說過吧,呵呵,說實在話我也是學(xué)計算機的Microsoft Visual Stu
  • visual studio示例代碼瀏覽器6.5.8

    10-24 / 12.1M

    推薦理由:支持大量的示例代碼的編輯工具,visualstudio示例代碼瀏覽器為用戶提供了豐富的代碼搜索功能,支持集成代碼
  • Visual Studio Code(微軟跨平臺編輯

    08-14 / 44.2M

    推薦理由:VisualStudioCode是一款免費的跨平臺代碼編輯器,為開發(fā)者們提供了對多種編程語言的內(nèi)置支持,豐富的代碼補
  • Microsoft Visual Studio 20151.0.

    07-22 / 2.6M

    推薦理由:MicrosoftVisualStudio2015企業(yè)版是當(dāng)今網(wǎng)絡(luò)功能強大、性能出眾的應(yīng)用程序。具備高級功能的企業(yè)級解決方案(
Visual C++
(26)Visual C++

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

...更多>>
visualbasic
(15)visualbasic

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

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

    10-20 / 241.6M

    推薦理由:MicrosoftVisualBasic(R)6.0企業(yè)版是創(chuàng)建高性能解決方案的最有效的工具。其包含以下功能:創(chuàng)建超高速應(yī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,十分適合剛學(xué)編程語言的初學(xué)新手!這個版本目前來說是使用人數(shù)是最多的
  • Visual Basic 6.0 win8.1兼容版(vb

    10-24 / 241.6M

    推薦理由:VisualBasic6.0在個個版本上面都是有很多的人是需要使用到的,當(dāng)然也是少不了現(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)在還是有部分的人在使用的,同時這個版本最大的特色
更多精彩內(nèi)容請點擊

visual studio

專題

擴(kuò)展知識

相關(guān)評論

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

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