介紹常用的調(diào)試命令、利用在線匯編、各種設(shè)置斷點(diǎn)進(jìn)行程序調(diào)試的方法資料下載
2021-04-16 |
pdf |
121.44KB |
次下載 |
3積分
資料介紹
如何建立工程、匯編、連接工程,并獲得目標(biāo)代碼,這僅僅代表你的源程序沒有語法錯(cuò)誤,至于源程序中存在著的其它錯(cuò)誤,必須通過調(diào)試才能發(fā)現(xiàn)并解決,事實(shí)上,除了極簡(jiǎn)單的程序以外,絕大部份的程序都要通過反復(fù)調(diào)試才能得到 正確的結(jié)果,因此,調(diào)試是軟件開發(fā)中重要的一個(gè)環(huán)節(jié),本文將介紹常用的調(diào)試命令、利用在線匯編、各種設(shè)置斷點(diǎn)進(jìn)行程序調(diào)試的方法,并通過實(shí)例介紹這些方法的使用。
一、常用調(diào)試命令
??
在對(duì)工程成功地進(jìn)行匯編、連接以后,按 Ctrl+F5 或者使用菜單 Debug->Start/Stop Debug Session 即可進(jìn)入調(diào)試狀態(tài),Keil 內(nèi)建了一個(gè)仿真 CPU 用來模擬執(zhí)行程序,該仿真 CPU 功 能強(qiáng)大,可以在沒有硬件和仿真機(jī)的情況下進(jìn)行程序的調(diào)試,下面將要學(xué)的就是該模擬調(diào)試 功能。不過在學(xué)習(xí)之前必須明確,模擬畢竟只是模擬,與真實(shí)的硬件執(zhí)行程序肯定還是有區(qū) 別的,其中最明顯的就是時(shí)序,軟件模擬是不可能和真實(shí)的硬件具有相同的時(shí)序的,具體的 表現(xiàn)就是程序執(zhí)行的速度和各人使用的計(jì)算機(jī)有關(guān),計(jì)算機(jī)性能越好,運(yùn)行速度越快。
進(jìn)入調(diào)試狀態(tài)后,界面與編緝狀態(tài)相比有明顯的變化,Debug 菜單項(xiàng)中原來不能用的命 令現(xiàn)在已可以使用了,工具欄會(huì)多出一個(gè)用于運(yùn)行和調(diào)試的工具條,如圖 1 所示,Debug 菜 單上的大部份命令可以在此找到對(duì)應(yīng)的快捷按鈕,從左到右依次是復(fù)位、運(yùn)行、暫停、單步、 過程單步、執(zhí)行完當(dāng)前子程序、運(yùn)行到當(dāng)前行、下一狀態(tài)、打開跟蹤、觀察跟蹤、反匯編窗 口、觀察窗口、代碼作用范圍分析、1#串行窗口、內(nèi)存窗口、性能分析、工具按鈕等命令。
接著執(zhí)行下一行程序,中間不停止,這樣程序執(zhí)行的速度很快,并可以看到該段程序執(zhí)行的總體效果,即最終結(jié)果正確 還是錯(cuò)誤,但如果程序有錯(cuò),則難以確認(rèn)錯(cuò)誤出現(xiàn)在哪些程 序???。單步執(zhí)行是每次執(zhí)行一行程序,執(zhí)行完該行程序以后 即停止,等待命令執(zhí)行下一行程序,此時(shí)可以觀察該行程序 執(zhí)行完以后得到的結(jié)果,是否與我們寫該行程序所想要得到 的結(jié)果相同,借此可以找到程序中問題所在。程序調(diào)試中, 這兩種運(yùn)行方式都要用到。
使用菜單 STEP 或相應(yīng)的命令按鈕或使用快捷鍵 F11 可 以單步執(zhí)行程序,使用菜單 STEP OVER 或功能鍵 F10 可以 以過程單步形式執(zhí)行命令,所謂過程單步,是指將匯編語言 中的子程序或高級(jí)語言中的函數(shù)作為一個(gè)語句來全速執(zhí)行。
圖 2 調(diào)試窗口
按下 F11 鍵,可以看到源程序窗口的左邊出現(xiàn)了一個(gè)黃色調(diào)試箭頭,指向源程序的第一行,如圖 2 所示。每按一次 F11,即執(zhí)行該箭頭所指程序行,然后箭頭指向下一行,當(dāng)箭頭 指向 LCALL DELAY 行時(shí),再次按下 F11,會(huì)發(fā)現(xiàn),箭頭指向了延時(shí)子程序 DELAY 的第 一行。不斷按 F11 鍵,即可逐步執(zhí)行延時(shí)子程序。
通過單步執(zhí)行程序,可以找出一些問題的所在,但是僅依靠單步執(zhí)行來查錯(cuò)有時(shí)是困難 的,或雖能查出錯(cuò)誤但效率很低,為此必須輔之以其它的方法,如本例中的延時(shí)程序是通過將 D2: DJNZ R6,D2 這一行程序執(zhí)行六萬多次來達(dá)到延時(shí)的目的,如果用按 F11 六萬多次的方法來執(zhí)行完該程序行,顯然不合適,為此,可以采取以下一些方法,第一,用鼠標(biāo)在 子程序的最后一行( ret)點(diǎn)一下,把光標(biāo)定位于該行,然后用菜單 Debug->Run to Cursor line(執(zhí)行到光標(biāo)所在行),即可全速執(zhí)行完黃色箭頭與光標(biāo)之間的程序行。第二,在進(jìn)入該子程序后,使用菜單 Debug->Step Out of Current Function(單步執(zhí)行到該函數(shù)外),使用該命令 后,即全速執(zhí)行完調(diào)試光標(biāo)所在的子程序或子函數(shù)并指向主程序中的下一行程序(這里是 JMP LOOP 行)。第三種方法,在開始調(diào)試的,按 F10 而非 F11,程序也將單步執(zhí)行,不同 的是,執(zhí)行到 lcall delay 行時(shí),按下 F10 鍵,調(diào)試光標(biāo)不進(jìn)入子程序的內(nèi)部,而是全速 執(zhí)行完該子程序,然后直接指向下一行“JMP LOOP”。靈活應(yīng)用這幾種方法,可以大大提 高查錯(cuò)的效率。
二、在線匯編
圖 3 在線匯編窗口
在進(jìn)入 Keil 的調(diào)試環(huán)境以后,如果發(fā)現(xiàn)程序有錯(cuò),可以直接對(duì)源程序進(jìn)行修改,但是 要使修改后的代碼起作用,必須先退出調(diào)試環(huán)境,重新進(jìn)行編譯、連接后再次進(jìn)入調(diào)試,如 果只是需要對(duì)某些程序行進(jìn)行測(cè)試,或僅需對(duì)源程序進(jìn)行臨時(shí)的修改,這樣的過程未免有些 麻煩,為此 Keil 軟件提供了在線匯編的能力,將光標(biāo)定位于需要修改的程序行上,用菜單 Debug->Inline Assambly… 即可出現(xiàn)如圖 3 的對(duì)話框,在 Enter New 后面的 編緝框內(nèi)直接輸入需更改的程序語句,輸入完后鍵入回車將自動(dòng)指向下 一條語句,可以繼續(xù)修改,如果不再 需要修改,可以點(diǎn)擊右上角的關(guān)閉按鈕關(guān)閉窗口。
?
三、斷點(diǎn)設(shè)置
程序調(diào)試時(shí),一些程序行必須滿足一定的條件才能被執(zhí)行到(如程序中某變量達(dá)到一定的值、按鍵被按下、串口接收到數(shù)據(jù)、有中斷產(chǎn)生等),這些條件往往是異步發(fā)生或難以預(yù) 先設(shè)定的,這類問題使用單步執(zhí)行的方法是很難調(diào)試的,這時(shí)就要使用到程序調(diào)試中的另一 種非常重要的方法——斷點(diǎn)設(shè)置。斷點(diǎn)設(shè)置的方法有多種,常用的是在某一程序行設(shè)置斷點(diǎn), 設(shè)置好斷點(diǎn)后可以全速運(yùn)行程序,一旦執(zhí)行到該程序行即停止,可在此觀察有關(guān)變量值,以 確定問題所在。在程序行設(shè)置/移除斷點(diǎn)的方法是將光標(biāo)定位于需要設(shè)置斷點(diǎn)的程序行,使 用菜單 Debug->Insert/Remove BreakPoint 設(shè)置或移除斷點(diǎn)(也可以用鼠標(biāo)在該行雙擊實(shí)現(xiàn)同 樣的功能);Debug->Enable/D isable Breakpoint 是開啟或暫停光標(biāo)所在行的斷點(diǎn)功能; Debug->Disable All Breakpoint 暫停所有斷點(diǎn);Debug->Kill All BreakPoint 清除所有的斷點(diǎn)設(shè) 置。這些功能也可以用工具條上的快捷按鈕進(jìn)行設(shè)置。
除了在某程序行設(shè)置斷點(diǎn)這一基本方法以外,Keil 軟件還提供了多種設(shè)置斷點(diǎn)的方法,按 Debug->Breakpoints… 即出現(xiàn)一個(gè)對(duì)話框,該對(duì)話框用于對(duì)斷點(diǎn)進(jìn)行詳細(xì)的設(shè)置,如圖 4所示。
圖 4 中 Expression 后的編緝框內(nèi)用于輸入表達(dá)式,該表達(dá)式用于確定程序停止運(yùn)行的條 件,這里表達(dá)式的定義功能非常強(qiáng)大,涉及到 Keil 內(nèi)置的一套調(diào)試語法,這里不作詳細(xì)說 明,僅舉若干實(shí)例,希望讀者可以舉一反三。
1) 在 Experssion 中鍵入 a==0xf7,再點(diǎn)擊 Define 即定義了一個(gè)斷點(diǎn), 注意,a 后有兩 個(gè)等號(hào),意即相等。該表達(dá)式的含義是:如果 a 的值到達(dá) 0xf7 則停止程序運(yùn)行。除使用相等符號(hào)之外,還可以使用>,>=,
2) 在 Experssion 后中鍵入 Delay 再點(diǎn)擊 Define,其含義是如果執(zhí)行標(biāo)號(hào)為 Delay 的行 則中斷。
3) 在 Experssion 后中鍵入 Delay,按 Count 后的微調(diào)按鈕,將值調(diào)到 3,其意義是 當(dāng)?shù)谌螆?zhí)行到 Delay 時(shí)才停止程序運(yùn)行。
4) 在 Experssion 后鍵入 Delay ,在Command 后鍵入 printf(“SubRoutine ‘Delay’has been Called\n”)主程序每次 調(diào)用 Delay 程序時(shí)并不停止運(yùn)行,但會(huì) 在輸出窗口 Command 頁輸出一行字 符,即 SubRoutine ‘Delay’ has been Called。其中“\n”的用途是回車換行, 使窗口輸出的字符整齊。
5) 設(shè)置斷點(diǎn)前先在輸出窗口的 Command頁中鍵入 DEFINE int I,然后在斷點(diǎn)設(shè)置時(shí)同 4),但是 Command 后鍵入 printf(“SubRoutine ‘Delay’ has been Called %d times\n”,++I),則主程序每次調(diào)用 Delay 時(shí)將會(huì)在 Command 窗口輸出該字符及被調(diào) 用的次數(shù),如 SubRoutine ‘Delay’has been Called 10 times。
對(duì)于使用 C 源程序語言的調(diào)試,表達(dá)式中可以直接使用變量名,但必須要注意,設(shè)置時(shí)只能使用全局變量名和調(diào)試箭頭所指模塊中的局部變量名。
四、實(shí)例調(diào)試
為進(jìn)行程序的調(diào)試,我們首先給源程序制造一個(gè)錯(cuò)誤,將延時(shí)子程序的第三行“DJNZ R6,$”后的$改為 D1,然后重新編譯,由于程序中并無語法錯(cuò)誤,所以編譯時(shí)不會(huì)有任何出 錯(cuò)提示,但由于轉(zhuǎn)移目的地出錯(cuò),所以子程序?qū)⑾萑霟o限循環(huán)中。
進(jìn)入調(diào)試狀態(tài)后,按 F10 以過程單步的形式執(zhí)行程序,當(dāng)執(zhí)行到 LCALL DELAY 行時(shí),程序不能繼續(xù)往下執(zhí)行,同時(shí)發(fā)現(xiàn)調(diào)試工具條上的 Halt 按鈕變成了紅色,說明程序在此不 斷地執(zhí)行著,而我們預(yù)期這一行程序執(zhí)行完后將停止,這個(gè)結(jié)果與預(yù)期不同,可以看出所調(diào) 用的子程序出了差錯(cuò)。為查明出錯(cuò)原因,按 Halt 按鈕使程序停止執(zhí)行,然后按 RST 按鈕使 程序復(fù)位,再次按下 F10 單步執(zhí)行,但在執(zhí)行到 LCALL DELAY 行時(shí),改按 F11 鍵跟蹤到子程序內(nèi)部(如果按下 F11 鍵沒有反應(yīng),請(qǐng)?jiān)谠闯绦虼翱谥杏檬髽?biāo)點(diǎn)一下),單步執(zhí)行程序,可以發(fā)現(xiàn)在執(zhí)行到“DJNZ R6,D1”行時(shí),程序不斷地從這一行轉(zhuǎn)移到上一行,同時(shí)觀察 左側(cè)的寄存器的值,會(huì)發(fā)現(xiàn) R6 的值始終在 FFH 和 FEH 之間變化,不會(huì)減小,而我們的預(yù) 期是 R6 的值不斷減小,減到 0 后往下執(zhí)行,因此這個(gè)結(jié)果與預(yù)期不符,通過這樣的觀察, 不難發(fā)現(xiàn)問題是因?yàn)闃?biāo)號(hào)寫錯(cuò)而產(chǎn)生的,發(fā)現(xiàn)問題即可以修改,為了驗(yàn)證即將進(jìn)行的修改是否正確,可以先使用在線匯編功能測(cè)試一下。把光標(biāo)定位于程序行“DJNZ R6,D1”,打開在線匯編的對(duì)話框,將程序改為“DJNZ R7,0EH”,即轉(zhuǎn)回本條指令所在行繼續(xù)執(zhí)行,其中0EH 是本條指令在程序存儲(chǔ)器中的位置,這個(gè)值可以通過在線匯編窗口看到,如圖 3 所示。 然后關(guān)閉窗口,再進(jìn)行調(diào)試,發(fā)現(xiàn)程序能夠正確地執(zhí)行了,這說明修改是正確的。注意,這 時(shí)候的源程序并沒有修改,此時(shí)應(yīng)該退出調(diào)試程序,將源程序更改過來,并重新編譯連接,以獲得正確的目標(biāo)代碼。
(mbbeetchina)
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- Matlab系列之程序調(diào)試資料下載
- Keil的調(diào)試命令和在線匯編與斷點(diǎn)設(shè)置 34次下載
- Keil的調(diào)試命令和在線匯編與斷點(diǎn)設(shè)置 75次下載
- WinDbg內(nèi)核調(diào)試的常用命令有哪些 7次下載
- Keil軟件實(shí)驗(yàn)教程之Keil的調(diào)試命令和在線匯編與斷點(diǎn)設(shè)置 11次下載
- Keil軟件公司8051單片機(jī)軟件開發(fā)工具的介紹和Keil入門實(shí)例教程 25次下載
- 串口調(diào)試小程序火災(zāi)報(bào)警器調(diào)試工具C語言程序免費(fèi)下載 36次下載
- STM32的調(diào)試實(shí)例的項(xiàng)目程序庫和調(diào)試實(shí)例資料合集免費(fèi)下載 89次下載
- VI調(diào)試(設(shè)置斷點(diǎn)) 0次下載
- Keil_的調(diào)試命令、在線匯編與斷點(diǎn)設(shè)置 10次下載
- Keil的調(diào)試命令,在線匯編與斷點(diǎn)設(shè)置
- Keil程序調(diào)試窗口應(yīng)用
- 基于Keil的入門實(shí)例教程
- Keil的調(diào)試命令、在線匯編與斷點(diǎn)設(shè)置
- 基于CAN的程序下載器與通訊調(diào)試器設(shè)計(jì)
- 適用于TI mmWave sensor的CCS在線調(diào)試腳本上手指南 1706次閱讀
- 硬件斷點(diǎn)和軟件斷點(diǎn)是什么 2712次閱讀
- 用AWTK和AWPLC快速開發(fā)嵌入式應(yīng)用程序-在線調(diào)試 771次閱讀
- hypervisor的調(diào)試分析方法 1281次閱讀
- 如何使用Ozone的調(diào)試功能 4894次閱讀
- 支持片上測(cè)試和調(diào)試功能的在線調(diào)試模塊的應(yīng)用設(shè)計(jì) 2464次閱讀
- FPGA開發(fā)在線調(diào)試和配置過程 4316次閱讀
- SMT貼片機(jī)在線編程調(diào)試的方法與流程介紹 8930次閱讀
- 基于雙端口RAM中多行代碼設(shè)置斷點(diǎn)功能實(shí)現(xiàn)新型通用調(diào)試模塊的設(shè)計(jì) 832次閱讀
- Python調(diào)試器,快速定位各種疑難雜癥 3030次閱讀
- MATLAB程序調(diào)試的方法及工具介紹 6640次閱讀
- SIM900A調(diào)試之波特率設(shè)置_SIM900A基站定位調(diào)試詳細(xì)步驟 1.3w次閱讀
- python程序調(diào)試中設(shè)置條件斷點(diǎn) 6181次閱讀
- python斷點(diǎn)調(diào)試方法 7205次閱讀
- 編碼不能沒調(diào)試,調(diào)試不能沒斷點(diǎn) 966次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多