嵌入式軟件調(diào)試技術

出版時間:2009-1  出版社:電子工業(yè)出版社  作者:羅克露,陳云川  頁數(shù):482  
Tag標簽:無  

前言

在程序開發(fā)過程中,一個公認的事實是編寫代碼并不難,但是如何寫出正確的代碼、如何排除代碼中的錯誤,卻并不是一件簡單的事情。如何排除代碼中的錯誤,這就涉及軟件的調(diào)試。調(diào)試技術的理論基礎并不復雜,但是調(diào)試本身卻是一門實踐性非常強的技術。需要說明的是,嵌入式系統(tǒng)中的軟件調(diào)試與桌面軟件的調(diào)試有很大的不同。調(diào)試嵌入式系統(tǒng)時,調(diào)試器和被調(diào)試程序往往是物理上分離的。調(diào)試器運行在宿主機上,而被調(diào)試程序運行在目標機上,宿主機與目標機之間通過某種媒介進行通信。同時,還要在目標機上運行一個稱為調(diào)試代理(Debug Agent)的監(jiān)控程序,由它來負責與運行在宿主機上的調(diào)試器進行通信,控制被調(diào)試程序的執(zhí)行,并將被調(diào)試程序的執(zhí)行情況及時反饋給調(diào)試器。這進一步增加了調(diào)試的復雜性。當前圖書市場上有關調(diào)試技術的書籍并不多。但是,對于從事實際開發(fā)的工程人員而言,尤其是對廣大的嵌入式系統(tǒng)程序員而言,調(diào)試是一個無法回避的永恒話題。因此本書以嵌入式開發(fā)中的調(diào)試技術和調(diào)試手段作為全書的核心,在當前眾多的計算機編程開發(fā)書籍中另辟蹊徑,獨樹一幟,對于剛接觸嵌入式程序開發(fā)的讀者而言,必將大有裨益。同時,對于經(jīng)驗豐富的程序員而言,本書也具有較大的參考價值。本書所用平臺本書采用的嵌入式硬件平臺為Intel公司的Sitsang評估板,其上運行的操作系統(tǒng)為ARM-Linux 2.4.19。本書宿主機端軟件平臺采用Red Hat 9.0(Linux 2.4.20-8),本地調(diào)試器為GDB 5.3(Red Hat 9.0默認配置),交叉調(diào)試器在GDB 6.4的基礎上構建。另外,在本書寫作的后期,作者換到了一臺筆記本電腦上工作,為了與時俱進,其上運行的是Fedora Core操作系統(tǒng)。本質(zhì)上講,F(xiàn)edora Core源自Red Hat,兩者并無根本不同。為消除讀者對此存疑,特此予以澄清。盡管本書采用的軟硬件平臺是固定的,但是書中演示的大部分實例都不依賴于具體的軟硬件環(huán)境。因此如果讀者所采用的軟硬件平臺與作者書中采用的有所不同,也無須多慮,大部分功能和操作都是相同的。本書內(nèi)容組織本書共分為3篇。上篇基礎篇,包括第1~2章。主要對調(diào)試的基礎知識進行了大致的概覽,對各種調(diào)試手段進行了簡單的說明和對比。中篇系統(tǒng)篇,包括第3~7章。第3章介紹GDB調(diào)試器的使用;第4章主要介紹如何通過GDB進行遠程調(diào)試,同時也涉及了遠程調(diào)試可能要用到的一些工具,如NFS、minicom等;第5~7章主要介紹在一些特定開發(fā)場景下所采用的調(diào)試技術,包括網(wǎng)絡環(huán)境下的調(diào)試、多線程與多進程環(huán)境下的調(diào)試、靜態(tài)庫與動態(tài)庫的調(diào)試,等等。下篇應用篇,包括第8~9章。這部分內(nèi)容屬于較綜合的話題,運用到了前述章節(jié)中所講述的一些內(nèi)容。第8章圍繞MPEG-4視頻流的解碼和播放展開,而第9章則給出了一個基于GPS的移動定位終端的開發(fā)。本書配套光盤內(nèi)容及使用方法本書配套光盤包含書中相關的補充資料、與Sitsang評估板相關的工具鏈和源代碼、本書第3~9章的源代碼,以及書中使用到的工具和軟件庫等。使用時只需將本光盤放入光盤驅(qū)動器中,選擇各文件夾瀏覽即可。

內(nèi)容概要

  本書兼顧理論與實踐。全書首先對調(diào)試技術及嵌入式調(diào)試手段進行一個概覽,然后重點對linux環(huán)境下的嵌入式調(diào)試技術進行詳細的講解,最后給出兩個綜合應用實例:MPEG-4視頻播放器的設計和基于GPS的移動定位終端。在編寫思路上,本書以理論為先、實踐為重;具體到調(diào)試技巧和手段上,則全部結合具體實例展開。書中各個實例之間采取從前至后逐步深入的方式,既銜接有序,又便于讀者學習。  本書配套光盤包含書中相關的補充資料、與Sitsang評估板相關的工具鏈和源代碼、本書第3~9章的源代碼,以及書中使用到的工具和軟件等。  本書既可作為Linux環(huán)境下嵌入式軟件調(diào)試技術從入門到精通的學習用書,也可供從事Linux環(huán)境下的嵌入式軟件調(diào)試的工程人員參考使用。

書籍目錄

上篇  基礎篇第1章  軟件調(diào)試概述 21.1  什么是軟件調(diào)試 21.2  軟件調(diào)試的分類 61.2.1  靜態(tài)調(diào)試和動態(tài)調(diào)試 61.2.2  機器級調(diào)試與源碼級調(diào)試 71.2.3  任務級調(diào)試與系統(tǒng)級調(diào)試 71.2.4  本地調(diào)試與遠程(交叉)調(diào)試 81.3  軟件調(diào)試的關鍵技術·斷點 81.3.1  軟件斷點 81.3.2  硬件斷點 81.4  調(diào)試器應當遵循的原則 91.4.1  調(diào)試器必須反映真實信息 91.4.2  提供盡可能多的程序上下文信息 91.4.3  Heisenberg原則·盡可能減少對被測系統(tǒng)的影響 101.5  嵌入式軟件調(diào)試手段 101.5.1  軟件仿真調(diào)試·模擬器 101.5.2  ICE·早期手段 111.5.3  BDM·M68K系列及PowerPC等采用的技術 121.5.4  JTAG·調(diào)試領域的后起之秀 131.5.5  調(diào)試代理·嵌入式調(diào)試的基石 151.6  本章小結 15第2章  邊界掃描測試技術(JTAG) 162.1  JTAG的背景和原理 162.2  JTAG接口的結構 192.3  測試訪問端口(TAP) 202.3.1  測試時鐘輸入TCK 202.3.2  測試模式輸入TMS 202.3.3  測試數(shù)據(jù)輸入TDI 212.3.4  測試數(shù)據(jù)輸出TDO 212.3.5  測試復位輸入TRST* 212.3.6  TAP的互聯(lián)方式 212.4  測試訪問端口控制器(TAP controller) 222.5  指令寄存器 272.6  JTAG指令 272.6.1  公共指令(public)與私有指令(private) 272.6.2  BYPASS指令 282.6.3  SAMPLE指令 292.6.4  PRELOAD指令 292.6.5  EXTEST指令 292.6.6  其他指令 292.7  數(shù)據(jù)寄存器組 302.7.1  BYPASS寄存器 312.7.2  邊界掃描寄存器 312.7.3  設備ID寄存器 322.7.4  其他數(shù)據(jù)寄存器 322.8  ARM7TDMI的JTAG調(diào)試 322.8.1  調(diào)試架構 332.8.2  ARM7TDMI處理器結構 332.8.3  進入調(diào)試狀態(tài) 342.8.4  JTAG指令 352.8.5  EmbeddedICE-RT邏輯 362.8.6  訪問寄存器和存儲器 382.9  本章小結 41中篇  系統(tǒng)篇第3章  學習使用GDB調(diào)試器 443.1  GDB簡介 443.1 1  GDB的啟動和退出 453.1.2  GDB的啟動步驟 503.1.3  GDB的多語言支持 503.2  在編譯時加入調(diào)試信息 513.2.1  打開GCC的調(diào)試選項-g 513.2.2  代碼優(yōu)化對調(diào)試的影響 523.3  在GDB下運行程序 533.3.1  指定要運行的程序 533.3.2  設置程序的運行環(huán)境 543.3.3  停止運行 603.4  斷點、監(jiān)視點與捕捉點 603.4.1  斷點、監(jiān)視點與捕捉點的設置 613.4.2  斷點的刪除、禁用和使能 753.4.3  條件斷點 823.4.4  斷點命令列表 873.4.5  斷點菜單·對函數(shù)重載的支持 893.5  繼續(xù)(continuing)與單步(stepping) 903.5.1  繼續(xù)運行 913.5.2  單步運行 913.5.3  與單步有關的命令 943.5.4  指令級單步命令 973.6  查看數(shù)據(jù) 993.6.1  用print命令查看數(shù)據(jù) 993.6.2  查看數(shù)據(jù)類型 1033.6.3  人為數(shù)組·查看內(nèi)存中的連續(xù)對象 1053.6.4  查看存儲器和寄存器 1083.6.5  自動顯示列表 1113.6.6  使用快捷變量(convenience variable) 1143.6.7  處理C語言宏定義 1153.6.8  產(chǎn)生轉儲文件 1163.7  棧幀的回溯與選定 1173.7.1  棧幀回溯(backtrace) 1183.7.2  棧幀選定 1203.7.3  棧幀狀態(tài) 1213.8  改變程序的執(zhí)行流程 1223.8.1  給變量賦值 1223.8.2  使程序從另外的地址繼續(xù)執(zhí)行 1243.8.3  向程序發(fā)送信號 1253.8.4  調(diào)用函數(shù) 1273.9  其他常用命令 1283.9.1  源代碼查看命令 1283.9.2  反匯編命令 1293.10  實例:Framebuffer與libjpeg混合編程 1313.10.1  Framebuffer簡介 1313.10.2  libjpeg簡介 1333.10.3  程序說明 1353.10.4  調(diào)試 1433.11  GDB命令匯總 1463.12  本章小結 148第4章  GDB遠程調(diào)試技術 1494.1  目標平臺簡介 1494.2  準備工作 1514.2.1  minicom終端仿真程序 1514.2.2  NFS文件系統(tǒng) 1544.2.3  聯(lián)合使用minicom和NFS 1574.3  兩種遠程調(diào)試方式 1594.3.1  gdbserver 1594.3.2  遠程插樁(stub) 1604.4  編譯arm-linux-gdb 1604.5  編譯gdbserver 1624.6  連接到遠程目標 1634.6.1  啟動gdbserver 1634.6.2  串行連接方式 1644.6.3  TCP連接方式 1654.6.4  UDP連接方式 1664.6.5  與遠程目標斷開連接 1664.6.6  GDB的遠程調(diào)試選項 1664.7  實例:調(diào)試誤用內(nèi)存的程序 1684.7.1  段錯誤 1684.7.2  野指針 1714.7.3  內(nèi)存泄漏 1744.7.4  處理內(nèi)存問題的對策 1764.8  實例:音頻采集與回放程序的調(diào)試 1764.8.1  Linux下的音頻接口 1764.8.2  OSS的編程接口 1774.8.3  OSS的編程機制 1784.8.4  OSS的一般框架 1814.8.5  源程序SndKit.c說明 1814.8.6  SndKit調(diào)試過程 1904.9  本章小結 193第5章  網(wǎng)絡應用程序調(diào)試 1945.1  套接口編程簡介 1945.1.1  基本TCP套接口編程 1985.1.2  基本UDP套接口編程 2035.2  網(wǎng)絡調(diào)試和診斷工具 2065.2.1  tcpdump 2075.2.2  其他工具 2105.3  實例:遠程獲取加速度 2125.3.1  加速度傳感器ADXL202JE簡介 2125.3.2  服務端程序 2135.3.3  客戶端程序 2185.3.4  小結 2245.4  實例:通過CDMA發(fā)送短消息 2245.4.1  Linux串口編程概覽 2245.4.2  發(fā)送英文短消息 2295.4.3  發(fā)送中文短消息 2405.4.4  小結 2475.5  本章小結 248第6章  多進程與多線程調(diào)試 2496.1  Linux下的多進程程序調(diào)試 2496.1.1  進程的創(chuàng)建 2496.1.2  GDB對多進程調(diào)試的支持 2516.1.3  實例:調(diào)試simple_fork 2536.2  Linux多線程程序調(diào)試 2556.2.1  線程的創(chuàng)建、終止和取消 2566.2.2  線程互斥鎖 2616.2.3  條件變量(condition variable) 2636.2.4  線程的cleanup handler 2676.2.5  線程特定數(shù)據(jù) 2686.2.6  線程引入的問題 2726.2.7  GDB對多線程調(diào)試的支持 2726.2.8  實例:調(diào)試simple_thread 2756.3  本章小結 279第7章  靜態(tài)庫與動態(tài)庫的調(diào)試 2807.1  靜態(tài)鏈接庫的構建和調(diào)試 2807.2  動態(tài)共享庫的優(yōu)點和代價 2877.3  動態(tài)共享庫的命名·soname 2897.4  動態(tài)共享庫的構建和安裝 2917.5  動態(tài)共享庫的使用 2927.6  動態(tài)共享庫的調(diào)試方法 2927.7  實例:解析AVI文件 2987.7.1  AVI文件格式介紹 2987.7.2  OpenDML所做之擴展 3037.7.3  AVI解析之代碼實現(xiàn) 3097.7.4  編譯共享庫并安裝到目標板 3307.7.5  遠程調(diào)試共享庫 3307.8  本章小結 334下篇  應用篇第8章  MPEG-4視頻播放器的設計及調(diào)試 3368.1  概述 3368.2  XviD與SDL的構建 3378.3  XviD編程接口說明 3398.3.1  版本 3398.3.2  錯誤碼 3408.3.3  色場空間 3408.3.4  profile和level定義 3418.3.5  像素幅型比(Pixel Aspect Ration) 3418.3.6  幀類型 3418.3.7  xvid_global()函數(shù) 3428.3.8  xvid_decore()函數(shù) 3448.3.9  小結 3508.4  SDL編程接口說明 3508.4.1  SDL的初始化和退出 3508.4.2  SDL視頻子系統(tǒng)函數(shù)接口 3518.4.3  SDL事件處理子系統(tǒng)函數(shù)接口 3558.5  整體結構 3598.6  輔助模塊:event和ping/pong雙緩沖區(qū) 3618.7  解碼模塊設計 3758.8  播放模塊設計 3938.9  驅(qū)動模塊設計 4078.10  本章小結 410第9章  基于GPS的移動定位終端 4119.1  功能概述 4119.2  GPS介紹 4129.2.1  GPS定位原理 4129.2.2  GPS數(shù)據(jù)格式 4149.3  MiniGUI介紹 4179.3.1  MiniGUI體系結構與模型 4189.3.2  交叉編譯MiniGUI 4199.3.3  為觸摸屏編寫IAL驅(qū)動層 4219.3.4  改寫MiniGUI服務器程序mginit 4329.4  在單獨的線程中讀取和解析GPS數(shù)據(jù) 4379.4.1  經(jīng)緯度坐標到像素坐標的映射 4379.4.2  雙精度浮點數(shù)字節(jié)序的問題 4419.4.3  通過異步串口讀寫GPS數(shù)據(jù) 4439.4.4  解析GPS數(shù)據(jù) 4449.4.5  計算歸一化坐標 4479.4.6  GPS線程 4489.4.7  與GUI前端交換數(shù)據(jù) 4519.4.8  GPS接收機模擬程序 4539.5  用到的MiniGUI元素 4549.5.1  主窗口 4559.5.2  控件 4579.5.3  靜態(tài)框 4609.5.4  按鈕 4619.5.5  編輯框 4659.5.6  GDI接口與位圖操作 4689.5.7  定時器 4739.5.8  消息處理過程 4749.6  本章小結 479參考文獻 480

章節(jié)摘錄

插圖:

編輯推薦

《嵌入式軟件調(diào)試技術》既可作為Linux環(huán)境下嵌入式軟件調(diào)試技術從入門到精通的學習用書,也可供從事Linux環(huán)境下的嵌入式軟件調(diào)試的工程人員參考使用。

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    嵌入式軟件調(diào)試技術 PDF格式下載


用戶評論 (總計4條)

 
 

  •   配套光盤壞了 ,讓人很失望 。一同郵寄過來來的另一本android的書的光盤卻沒壞。希望 網(wǎng)站能提供光盤內(nèi)容的下載。
  •   這本書真的不錯,用GDB進行調(diào)試的各個方面都講到了,也比較詳細。非常適合我們這些做嵌入式Linux的人看,雖然有些可能是從網(wǎng)上抄下來的(純熟一家之言,如果說錯了請作者見諒)。
  •   該書光盤壞的,買了一本是壞的,又換了一本還是壞的,最后又在圖書管試了大概六七本書的光盤都是壞的。根據(jù)書上留的郵箱地址,聯(lián)系了一下,快一個月了,被編輯忽悠來忽悠去的,為了想收取20快錢,一直都沒把這本書的代碼發(fā)給我。發(fā)不發(fā)無所謂,忽悠人太可氣!抵制電子工業(yè)出版社,抵制垃圾編輯!!
  •   超級適合用GDB調(diào)試的讀者
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7