在線調(diào)試程序時(shí),打斷點(diǎn)是非常有效的一種方式,配合單步調(diào)試,可以快速定位問(wèn)題。但有的時(shí)候,手動(dòng)打斷點(diǎn)用起來(lái)不是那么方便。 比如,想要在一個(gè)循環(huán)的第N次停下來(lái),如果手動(dòng)打斷點(diǎn),那就要不停的點(diǎn)擊單步運(yùn)行,直到循環(huán)運(yùn)行到第N次。 再比如,程序運(yùn)行過(guò)程中變量不知何時(shí)被改變了,又不好定位,手動(dòng)打斷點(diǎn)就不知打在哪里。這時(shí)就要用到一些斷點(diǎn)的高級(jí)用法。
1、設(shè)置斷點(diǎn)的運(yùn)行次數(shù)
以下面程序?yàn)槔谘h(huán)的第十次將程序停止。首先在循環(huán)中手動(dòng)打一個(gè)斷點(diǎn):
點(diǎn)擊Debug菜單,選擇BreakPoints:
彈出下面菜單:
最上面的斷點(diǎn)是手動(dòng)打的,雙擊該斷點(diǎn),會(huì)看到Expression會(huì)顯示該斷點(diǎn)的信息,修改Count的值為10,點(diǎn)擊Define,然后關(guān)閉該窗口。這里說(shuō)明一下:Expression為表達(dá)式,即斷點(diǎn)的條件,可以看到,手動(dòng)設(shè)置的斷點(diǎn)結(jié)尾為123,表示在main.c文件的123行。這里支持基本的>、<、==、!=等操作符。Count為次數(shù),表示運(yùn)行多少次中斷一次,手動(dòng)設(shè)置的斷點(diǎn)Count都是1。Command為命令,表示到達(dá)該斷點(diǎn)時(shí)執(zhí)行的命令,默認(rèn)為空。 按照上面的設(shè)置,運(yùn)行程序。可以看到,程序運(yùn)行到斷點(diǎn)時(shí)沒(méi)有馬上停下,而是在第10次才停下來(lái): ?
2、變量匹配斷點(diǎn)
將變量添加到Watch窗口,右擊選擇Set Access BreakPoint at xxx。還是彈出剛才的菜單:
勾選Access方式Read或Write,設(shè)置Count值,點(diǎn)擊Define。這里選擇Write,Count值為4,表示該變量第四次被寫入時(shí)程序會(huì)停止。
3、變量條件匹配斷點(diǎn)
跟上一步一樣,在Watch窗口,右擊變量選擇Set Access BreakPoint at xxx。勾選Access方式Read或Write,刪除Expression下原來(lái)的內(nèi)容,填寫表達(dá)式“AD== 10”。點(diǎn)擊Define。這樣當(dāng)AD==10時(shí)程序會(huì)停止。
4、打印信息
選擇一個(gè)手動(dòng)打好的斷點(diǎn),然后在Command下填寫printf(),則在運(yùn)行到斷點(diǎn)處時(shí),程序不會(huì)停止,而是在Command窗口打印設(shè)置的信息。
5、條件匹配打印信息
還可以將3和4組合使用,如下:
則AD==10時(shí),程序不中斷,在Command窗口打印信息。 斷點(diǎn)的高級(jí)用法還有很多種,不同的表達(dá)式,不同的指令等,具體可查閱Keil的使用幫助文檔。
END
審核編輯 :李倩
-
keil
+關(guān)注
關(guān)注
69文章
1214瀏覽量
167371 -
變量
+關(guān)注
關(guān)注
0文章
613瀏覽量
28478 -
斷點(diǎn)
+關(guān)注
關(guān)注
0文章
12瀏覽量
7735
原文標(biāo)題:Keil調(diào)試時(shí)設(shè)置斷點(diǎn)的高級(jí)用法
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
hyper 網(wǎng)絡(luò)設(shè)置,Hyper-V網(wǎng)絡(luò)設(shè)置:高級(jí)網(wǎng)絡(luò)配置技巧
![hyper 網(wǎng)絡(luò)<b class='flag-5'>設(shè)置</b>,Hyper-V網(wǎng)絡(luò)<b class='flag-5'>設(shè)置</b>:<b class='flag-5'>高級(jí)</b>網(wǎng)絡(luò)配置技巧](https://file1.elecfans.com/web3/M00/06/FB/wKgZO2eRojaAedKRAAJ1cEnLmOg140.png)
hyper-v 配置,Hyper-V配置:性能優(yōu)化與高級(jí)設(shè)置
![hyper-v 配置,Hyper-V配置:性能優(yōu)化與<b class='flag-5'>高級(jí)</b><b class='flag-5'>設(shè)置</b>](https://file1.elecfans.com/web3/M00/06/FB/wKgZO2eRojaAedKRAAJ1cEnLmOg140.png)
keil在Debug的高級(jí)用法
![<b class='flag-5'>keil</b>在Debug的<b class='flag-5'>高級(jí)</b><b class='flag-5'>用法</b>](https://file.elecfans.com/web2/M00/09/16/pYYBAGD0FvWAeWpFAAAb1Fux1oA753.jpg)
網(wǎng)關(guān)斷點(diǎn)續(xù)傳可以實(shí)現(xiàn)什么功能
keil軟件仿真如何仿真輸入
如何把keil軟件設(shè)置成中文
TC2XX/3XX多核斷點(diǎn)設(shè)置無(wú)效的原因?
keil 斷點(diǎn) 執(zhí)行次數(shù)設(shè)置后,出現(xiàn)非法變量的錯(cuò)誤
STM8在STLINK中仿真設(shè)置斷點(diǎn),某些行設(shè)置不了斷點(diǎn)是怎么回事?
STM32F103中斷服務(wù)程序里設(shè)置斷點(diǎn)沒(méi)有停下來(lái)是什么原因引起的?
怎么啦?你的Keil C51和Keil MDK還無(wú)法共存嗎?
![怎么啦?你的<b class='flag-5'>Keil</b> C51和<b class='flag-5'>Keil</b> MDK還無(wú)法共存嗎?](https://file.elecfans.com/web2/M00/20/B3/pYYBAGGfNNmAK-PZAAJsGM5Cgk0227.jpg)
STM32F103使用keil5進(jìn)入debug模式,斷點(diǎn)能觸發(fā),但是程序還在運(yùn)行,為什么?
KEIL調(diào)試STM32在運(yùn)行在打斷點(diǎn)位置后芯片復(fù)位是什么原因?qū)е碌哪兀?/a>
AWTK 開源串口屏開發(fā)(10) - 告警信息的高級(jí)用法
![AWTK 開源串口屏開發(fā)(10) - 告警信息的<b class='flag-5'>高級(jí)</b><b class='flag-5'>用法</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
評(píng)論