版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、嵌入式系統(tǒng)的調(diào)試,提綱,調(diào)試方法概述 GDB調(diào)試 利用GDB進行本地調(diào)試 利用GDB進行遠程調(diào)試,ARM調(diào)試方法,Windows操作系統(tǒng) ARM ADS/SDT + 調(diào)試器 GNU + Cygwin + 調(diào)試器 ARM SDT + 簡易電纜 Linux操作系統(tǒng) GNU + GDB,嵌入式軟件的調(diào)試,交叉調(diào)試器 是指調(diào)試程序和被調(diào)試程序運行在不同機器上的調(diào)試器 調(diào)試器通過某種方式能控制目標機上被調(diào)試程序的運行方式 通過調(diào)試器能查看和修改目標機上的內(nèi)存、寄存器以及被調(diào)試程序中的變量等,嵌入式軟件調(diào)試工具-GDB,GDB是GNU C自帶的調(diào)試工具 運行程序,可以給程序加上所需的調(diào)試任何條件 在給定的
2、條件下讓程序停止 在設置的斷點處(斷點可以是條件表達式) 檢查程序停止時的運行狀態(tài) 當程序被停住時,可以檢查此時你的程序中所發(fā)生的事。 通過改變一些數(shù)據(jù),可以更快地改正程序的錯誤 動態(tài)的改變程序的執(zhí)行環(huán)境,C/C+程序調(diào)試前的準備工作,在編譯程序時,添加調(diào)試信息到可執(zhí)行文件中 使用編譯器( cc/gcc/g+)的 -g 參數(shù) $gcc -g hello.c -o hello,使用GDB進行調(diào)試,啟動GDB,并裝入被調(diào)試程序-兩種方式 在命令行上鍵入 gdb 并按回車鍵 通過file 裝入要調(diào)試的文件 在命令行上鍵入 gdb并帶文件參數(shù),再按回車鍵 $gdb 例 GDB并載入程序 gdb_tes
3、t,設置斷點(breakpoint),列文件清單 list命令 (gdb) list line1,line2 使用break命令(可簡寫為b)設置斷點 break line-number 使程序恰好在執(zhí)行給定行之前停止 break function-name 使程序恰好在進入指定的函數(shù)之前停止 break line-or-function if condition 如果condition(條件)是真,程序到達指定行或函數(shù)時停止 (gdb) break 46 if testsize=100 break routine-name 在指定例程的入口處設置斷點,斷點的管理,顯示當前gdb的斷點信息:i
4、nfo break (gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0 x000028bc in init_random at qsort2.c:155 2 breakpoint keep y 0 x0000291c in init_organ at qsort2.c:168 刪除指定的某個斷點 (gdb) delete breakpoint 1 禁止使用某個斷點 (gdb) disable breakpoint 1 該命令將禁止斷點 1,同時斷點信息的 (Enb)域將變?yōu)?n 允許使用某個斷點 (gdb)
5、 enable breakpoint 1 清除原文件中某一代碼行上的所有斷點 (gdb)clean number 注:number 為原文件的某個代碼行的行號,運行調(diào)試,運行程序 (gdb) run 顯示數(shù)據(jù) 利用print 命令可以檢查各個變量的值。 (gdb) print p (p為變量名) whatis 命令可以顯示某個變量的類型 (gdb) whatis p type = int *,單步執(zhí)行與退出,單步執(zhí)行 (gdb)next 不進入單步執(zhí)行 (gdb)step 進入單步執(zhí)行 (gdb)finish 如果已經(jīng)進入了某函數(shù),而想退出該函數(shù)返回到它的調(diào)用函數(shù)中,可使用命令 退出 (gdb
6、)quit,gdb 的常用命令(1),file FILE 裝載指定的可執(zhí)行文件進行調(diào)試。 help NAME 顯示指定命令的幫助信息。 info break 顯示當前斷點清單,包括到達斷點處的次數(shù)等。 info files 顯示被調(diào)試文件的詳細信息。 info func 顯示所有的函數(shù)名稱。 info local 顯示當函數(shù)中的局部變量信息。 info prog 顯示被調(diào)試程序的執(zhí)行狀態(tài)。 info var 顯示所有的全局和靜態(tài)變量名稱。,gdb 的常用命令(2),break NUM 在指定的行上設置斷點。 bt 顯示所有的調(diào)用棧幀。該命令可用來顯示函數(shù)的調(diào)用順序。 clear 刪除設置在特定
7、源文件、特定行上的斷點。其用法為clear FILENAME:NUM continue 繼續(xù)執(zhí)行正在調(diào)試的程序。該命令用在程序由于處理信號或斷點而 導致停止運行時。 display EXPR 每次程序停止后顯示表達式的值。表達式由程序定義的變量組成。 kill 終止正被調(diào)試的程序。 list 顯示源代碼段。 make 在不退出 gdb 的情況下運行 make 工具。 next 在不單步執(zhí)行進入其他函數(shù)的情況下,向前執(zhí)行一行源代碼。 print EXPR 顯示表達式 EXPR 的值。,gdb 使用范例,清單 一個有錯誤的 C 源程序 mytest.c - 1include 2 3static c
8、har buff 256; 4static char* string; 5int main () 6 7printf (“Please input a string: ”); 8gets (string); 9 printf (nYour string is: %sn, string); 10 ,范例的編譯運行,程序目的 是接受用戶的輸入,然后將用戶的輸入打印出來 編譯運行$ gcc -o mytest -g mytest.c $ ./mytest Please input a string: asfd Segmentation fault (core dumped) 錯誤分析 使用了一個未經(jīng)
9、過初始化的字符串地址 string,段錯誤!,錯誤定位-范例的調(diào)試,#(gdb)run,#gdb mytest,#(gdb)where,#(gdb)list,gets (string); printf (nYour string is: %sn, string); ,#(gdb)print string,string不合法,#(gdb)break 8,#(gdb)run,#(gdb)set string=“”,#(gdb)continue,正常結束,提綱,調(diào)試方法概述 GDB調(diào)試 利用GDB進行本地調(diào)試 利用GDB進行遠程調(diào)試,遠程調(diào)試帶來的問題,涉及兩方,如何通信? 調(diào)試器與被調(diào)試程序 被調(diào)
10、試程序產(chǎn)生異常 如何及時通知調(diào)試器 調(diào)試器如何控制、訪問被調(diào)試程序 調(diào)試器如何識別有關被調(diào)試程序的多任務信息并控制某一特定任務 調(diào)試器如何處理某些與目標硬件平臺相關的信息,嵌入式Linux的遠程調(diào)試環(huán)境的搭建原理,調(diào)試器 運行于通用桌面操作系統(tǒng)的應用程序 被調(diào)試的程序 運行于基于特定硬件平臺的嵌入式Linux(目標操作系統(tǒng))上,插樁(stub),插樁(stub)方案 在目標操作系統(tǒng)和調(diào)試器內(nèi)分別加入某些功能模塊,二者互通信息來進行調(diào)試 解決遠程調(diào)試的問題 調(diào)試器與被調(diào)試程序的通信 被調(diào)試程序產(chǎn)生異常及時通知調(diào)試器 調(diào)試器控制、訪問被調(diào)試程序 調(diào)試器識別有關被調(diào)試程序的多任務信息并控制某一特定任
11、務 調(diào)試器處理與目標硬件平臺相關的信息,遠程調(diào)試示意圖,使用GDB遠程調(diào)試原理圖,生成arm-linux-gdb,生成gdbserver,利用arm-linux-gcc 編譯源文件,宿主機,目標機,運行arm-linux-gdb,運行gdbserver,gdbserver,編譯好的可執(zhí)行文件,利用GDB進行遠程調(diào)試,編譯宿主機上的GDB調(diào)試器,解壓gdb-5.3.tar.gz 創(chuàng)建 makefile 文件 ./configure -target=arm-linux -prefix=/usr/local/arm-gdb v #make #make install 在 /usr/local/arm
12、-gdb/bin 中生成arm-linux-gdb,編譯目標機上的stub程序,設置編譯環(huán)境 export PATH=$PATH:/usr/local/arm-gdb/bin 生成makefile ./configure -target=arm-linux -host=arm-linux 編譯用于目標機的stub程序 gdbserver make CC = /usr/local/xsbase-arm-linux-R1/bin/arm-linux-gcc編譯 在gdb/gdbserver目錄下將生成gdbserver,宿主機和目標板之間的通信連接準備,建立宿主機和目標板之間的TCP/IP連接 設
13、置XSBase 的IP地址是192.168.100.50 假設主機平臺的 IP是192.168.100.216 利用arm-linux-gcc編譯測試程序bubble.c文件 #arm-linux-gcc -g bubble.c -o test 下載test和gdbserver到XSBase目標板,建立gdb和gdbserver的連接,在XSBase目標板上運行gdbserver 拷貝test程序到主機平臺上的/usr/local/arm-gdb/bin目錄下,然后執(zhí)行arm-linux-gdb #arm-linux-gdb,連接到xsbase開發(fā)板 如果連接成功的話,在XSBase上將出現(xiàn)下面的信息,內(nèi)核調(diào)試,kgdb 是一個在Linux內(nèi)核上提供完整的gdb調(diào)試器功能的補丁 通過串口線以鉤子的形式掛入目標調(diào)試系統(tǒng)進行工作,而在遠端運行gdb 使用kgdb時需要兩個系統(tǒng) 一個運行調(diào)試器 一個運行待調(diào)試的內(nèi)核 不同體系結構、不同內(nèi)核版本使用的kgdb由不同的人員維護 使用時確保KERNEL_HACKING被選上
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年社會工作(社區(qū)建設)試題及答案
- 2025年大學小學教育(小學教育應用)試題及答案
- 2025年中職安全(危險預判)試題及答案
- 2025年中職口腔技術(口腔修復體就位)試題及答案
- 2025年中職(眼視光與配鏡)視力矯正技能測試題及答案
- 2026年隱私計算安全融合項目營銷方案
- 2025年中職針灸推拿(推拿手法)試題及答案
- 2026年濕電子化學品項目評估報告
- 2025年高職(環(huán)境監(jiān)測技術)清潔生產(chǎn)技術試題及答案
- 2025年高職(醫(yī)療器械維護與管理)醫(yī)療器械檢測試題及答案
- 總承包工程技術標述標匯報
- 2023年馬克思主義基本原理概論讀書筆記
- 鋼筋桁架樓板配筋及撓度計算小工具
- TY/T 4001.1-2018汽車自駕運動營地建設要求與開放條件
- GB/T 40692-2021政務信息系統(tǒng)定義和范圍
- GB/T 19022-2003測量管理體系測量過程和測量設備的要求
- 人工智能與教育的深度融合課件
- 國際經(jīng)濟法期末導學
- 案例onyx使用內(nèi)容
- 注塑機全年保養(yǎng)計劃
- 房屋建筑工程投標書范本課件
評論
0/150
提交評論