《軟體調試》導讀之CPU篇

來源:互聯網
上載者:User

 

《軟體調試》的第2篇是CPU的調試支援,由第2~7章組成,共有136頁,是全書的第一個核心部分。寫作和閱讀這一篇的主要目標有如下幾個:

  1. 介紹大多數軟體工程師需要補充的CPU基礎。
  2. CPU對軟體調試核心功能的支援。
  3. CPU對軟體調試擴充功能的支援。
  4. CPU中用於調試系統故障和自身問題的設施。
  5. 現代CPU和整合晶片所使用的硬體調試方案。

針對以上目標,第2、3章是滿足目標1的,4~7章依次是滿足另外四個目標的。下面對各部分的重點內容分別略作介紹。

一、介紹一個調試高手應該掌握的CPU層的基礎知識。第2章和第3章是專門服務於這一目的的。調試好比行醫看病,病人是電腦系統,要能看懂這個系統的毛病然後再對其施以治療或者手術,那麼必須瞭解其五丈六腑的結構,血脈流通的路線,生息運轉的機理。要做到這一點,深刻理解電腦系統中硬體部分的核心——CPU——很重要。有人說,CPU是重要,但有什麼必要在一本《軟體調試》的書中寫這個呢?調試高手還需要數學基礎和語文基礎呢,怎麼不開兩章講講呢?這一拮問不是沒有道理,因此作者考慮到這一點,謹慎選擇了要講的內容,並嚴格控制了篇幅。入選的內容要符合三個條件:一是夠重要,二是夠常用,三是與調試密切相關。於是,《軟體調試》最後選擇如下一些內容:

指令集的概念(2.1節):有幾次面試年輕的程式員時,我詢問:“你熟悉哪種CPU架構和指令集呢?”不止一次,有人不能理解這個問題。“CPU還有很多種(架構)嗎?”x86太成功了!指令是CPU的語言,理解指令集是為構築軟體知識大廈打下一塊不可少的基石。

IA-32處理器(2.2節):這也是一個備受胡略和誤解的重要概念。有人說都進入64位時代了,還學IA-32幹嗎?殊不知,今天大多數PC使用的x64架構只是原有32位架構中的一種新的操作模式(e.g. IA-32e)。要理解x64,還需要先理解32位的情況。或者說,如果有紮實的32位基礎,那麼可以很容易理解64位,反方向則很難走通。因為長達三十多年的廣泛應用(從1985年80386的推出算起),IA-32架構對電腦的影響太深入了,甚至超出了CPU,影響到了系統匯流排和外設的設計。2.2節使用4頁半的篇幅全面瀏覽了已經推出的每一代IA-32 CPU,從386到今天的Core 2系列。

CPU的操作模式(2.3節):經常遇到的重要概念,扼要介紹。

寄存器(2.4節):將IA CPU的所有寄存器分為五類做了介紹:通用寄存器、標誌寄存器、MSR寄存器、控制寄存器和其它寄存器。除了介紹概念外,這一小節還有一個目的是用作“調試手冊”,我在調試時,時常還翻到這幾頁內容,查寄存器的位定義。

保護模式(2.5-2.7節):這幾乎是我做面試時必問的一個概念。深刻理解這個概念,才能深刻理解今天的電腦系統在如何求解電腦領域的一個永恒課題——多任務。保護資料是保護模式的一個主要任務,虛擬記憶體是目前實現這一任務的主要方法。頁機制是今天所有的商業作業系統都依賴的一種機制。理解虛擬記憶體和頁機制對於軟體調試也非常重要。因為如果搞不清楚這些概念,那麼就會被虛擬位址、線性地址、物理地址、IO地址這些概念所搞暈。也不容易建立起電腦世界的空間概念——記憶體空間、進程空間等。

中斷和異常(第3章):這兩個概念有聯絡,又不同。有時又被混用,所以不少程式員對其模稜兩可。IA-32架構將異常分為三種,這更是很多人聞所未聞。記得有個陌生的青年寫EMAIL給我,對《軟體調試》76頁的說法“當CPU產生異常時,其程式指標是指嚮導致異常的下一條指令的”提出質疑:
 
“CPU產生異常時,其程式指標不是指向原來那條指令嗎?”

我回信解釋說“因為異常不同,異常發生時程式指標的取值是不同的”,他更加困惑:

“我還是不能理解,難道異常還有兩種嗎?”

我知道了他迷惑的根本原因,把表3-1“異常分類”發給了他,這下他徹底清楚了。是啊,如此重要的概念,我們的大學教育(包括電腦科學的研究生)雷根本沒有,也不能完全怪個人。

另外,3.4節的“中斷和異常優先順序”是寫給高水平讀者的較難內容。

二、CPU對軟體調試核心功能的根本支援,即第4章。這是全書的核心內容之一,深入介紹了斷點指令、調試寄存器和支援逐步執行的陷阱標誌。這三大支援是構築今日調試技術的三大基石,很多至關重要的調試功能都是建立在這三個基礎之上的,包括設定斷點、變數監視、各種各樣的跟蹤執行、調試資訊輸出、核心調試等等。這一章共有32頁,讀者應該認真閱讀每一頁。4.4節的實模式調試器例析也值得仔細讀,最好是把Tim Paterson先生所寫的彙編代碼列印出來對照閱讀(連結為:http://www.patersontech.com/dos/Docs/Mon_86_1.4a.pdf),同時又可以學習彙編和欣賞大師的“手筆”。

三、CPU對軟體調試擴充功能的硬體支援,即第5章。第4章介紹的根本支援是從80386開始就定形了的東西。軟體在不斷髮展,調試支援明顯跟不上速度。因此今天的調試技術很多時候很乏力。第5章介紹的分支記錄和效能監控機制可以說是從奔騰開始的新一代處理器引入的最重要調試支援。它是今天的大多數軟體分析(profiling)和效能調優(performance tune)工具所依賴的基礎設施。

四、機器檢查機制(第6章)。這是奔騰CPU引入的一個旨在報告硬體問題的錯誤記錄和報告機制。這一機制對很多軟體工程師可能都很陌生。瞭解這一機制,不僅可以學到這樣一個CPU層的基礎知識,而且有助於建立“可調試性”的思想,也就是第5篇重點討論的東西。

五、硬體調試方案(第7章)。軟體問題是千變萬化的,甚至可以說,很難找到兩個負責的軟體問題是一模一樣的。因此,不同的調試工具和調試技術都有它的適用範圍,不是無所不能的。比如有些問題,就適合用使用者態偵錯工作階段來跟蹤,有些問題使用核心調試比較合適,有些問題只使用單純的軟體調試器可能根本不行。這時就要使用硬體調試工具來幫忙。JTAG是CPU和其它大規模整合晶片普遍使用的測試和調試方案,廣泛用於調試晶片自身、系統軟體、韌體和特殊複雜的軟體問題。從某種程度上講,基於JTAG技術的硬體工具只是為調試器訪問偵錯目標提供了一種“硬體化”的通訊方法。在大多數情況下,還是要依賴軟體調試器這樣的軟體工具來實現各種調試。或者說,大多時候是把這種調試方式統一到純軟體的調試方案架構中,這樣調試者就可以使用熟悉的調試功能來實現調試。比如,INTEL的ITP工具就以COM組件方式為WinDBG提供了服務,使WinDBG可以通過ITP工具進行核心調試,參見http://advdbg.com/blogs/advdbg_system/articles/903.aspx。

最後想提一下2.8節——系統概貌。這一節用一頁的篇幅介紹了今天PC系統的硬體架構,也就是圖2-13。在腦海中能有這樣一幅圖對於理解電腦系統很有好處。這裡介紹了一系列常用的術語,比如南橋、北橋、匯流排、晶片集等。CPU、北橋和南橋是目前主板上的三顆最重要晶片。即將推向市場的下一代晶片集將把北橋的功能整合到CPU和南橋中,即所謂的“雙晶片架構”,不過這仍不影響基本的概念,比如記憶體控制器(memory controller)依然存在,只不過是移到CPU內部。

總體來說,第2篇的內容都比較好理解,篇幅也不是很長。稍微用點毅力就可以將其通讀一遍。希望讀者看過後能對CPU的認識有一個明顯的提高,使自己的硬體基礎更紮實些。當然重中之重是調試支援,後面幾篇還會接著講......

《軟體調試》電子書下載:http://bv.csdn.net/resource/rjts.pdf

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.