调试笔记--keil 断点调试小技巧
調(diào)試筆記–keil 斷點(diǎn)調(diào)試小技巧
給變量打斷點(diǎn)
調(diào)試不熟悉的項(xiàng)目時(shí),臥槽!怎么這么多全局變量?這玩意又在那修改了??這個(gè)時(shí)候會(huì)給變量打斷點(diǎn)就能省好多事。
Expression: 設(shè)置斷點(diǎn)條件, 表達(dá)式可以使用 == > < ! ,當(dāng)條件為真時(shí), Count 減一
Count:設(shè)置次數(shù),當(dāng) Expression 為真 Count 減一,當(dāng)Count為0時(shí)觸發(fā)斷點(diǎn)效果
Access:何時(shí)去判斷表達(dá)式 Expression,如果勾選Read,則讀變量時(shí)就會(huì)去判斷表達(dá)式Expression,同理,勾選Write后,每當(dāng)寫變量時(shí)就回去判斷表達(dá)式
Size、Bytes、Objects一般默認(rèn)即可。
設(shè)置完后按Define即可設(shè)置斷點(diǎn)。
4. 刪除斷點(diǎn)
打開debug菜單下的Breakpoints選項(xiàng)
選中要?jiǎng)h除的斷點(diǎn), 點(diǎn)擊Kill Selected
例子
當(dāng)寫入xiaoMing.age變量10次后觸發(fā)斷點(diǎn)
當(dāng)變量 xiaoMing.age 等于 10時(shí),觸發(fā)斷點(diǎn)
注意事項(xiàng)
打斷點(diǎn)其實(shí)就是DEBUG模塊檢測(cè)固定RAM地址,當(dāng)有指令用的預(yù)定的RAM地址,將指令進(jìn)行替換,局部變量存放在棧中,地址不固定因此不能這樣操作。全局靜態(tài)變量的作用域只是當(dāng)前文件內(nèi)可訪問,因此如果強(qiáng)行使用可能導(dǎo)致結(jié)果不確定(有可能按照預(yù)期斷點(diǎn)停止,也有可能不會(huì))
既然原理是檢測(cè)固定RAM地址,那么直接從Menory找到對(duì)應(yīng)地址設(shè)置斷點(diǎn)也是一樣可行的
斷點(diǎn)設(shè)定好后,如下圖,想要修改成只在寫入時(shí)檢測(cè),即去掉Read的勾選,需要將改斷點(diǎn)刪除然后重新設(shè)置一個(gè),不能在原來的上面進(jìn)行修改。
斷點(diǎn)分為軟件斷點(diǎn)和硬件斷點(diǎn),硬件斷點(diǎn)數(shù)量由單片機(jī)內(nèi)部硬件決定,實(shí)測(cè)M3、M4、M7內(nèi)核是8個(gè)硬件斷點(diǎn),軟件斷點(diǎn)是調(diào)試器根據(jù)一定算法,動(dòng)態(tài)的設(shè)置硬件斷點(diǎn),或者在調(diào)試過程中動(dòng)態(tài)修改FLASH,達(dá)到斷點(diǎn)數(shù)量無限制效果。
- 手頭有個(gè)CMSIS-DAP(第一代DAP)實(shí)測(cè)不支持軟件斷點(diǎn),只由硬件按斷點(diǎn),當(dāng)斷點(diǎn)超出后MDK會(huì)給出提示
CMSIS-DAP 實(shí)在是需要軟件斷點(diǎn),可以手動(dòng)在需要加斷點(diǎn)的代碼前加上 __asm(“BKPT 0”); 可以無限個(gè),但是在正式代碼中一定記得剔除
- jlinkV9 支持軟件斷點(diǎn),但是軟件斷點(diǎn)可能會(huì)動(dòng)態(tài)修改flash內(nèi)容(本質(zhì)也是添加 __asm(“BKPT 0”); 語句,只是由jlink自動(dòng)添加)
MDK5斷點(diǎn)調(diào)試,有時(shí)候斷點(diǎn)亂跳,就有可能是用jlink調(diào)試 斷點(diǎn)設(shè)置多了,jlink會(huì)修改flash內(nèi)容,這個(gè)時(shí)候如果直接拔掉jlink,flash中就會(huì)保存斷點(diǎn)信息,會(huì)影響正常運(yùn)行而且下次調(diào)試時(shí)如果沒有更新程序,mdk里面不會(huì)顯示該斷點(diǎn),但是斷點(diǎn)信息已經(jīng)在flash中了,執(zhí)行到對(duì)應(yīng)語句依然會(huì)暫停
缺點(diǎn)
需要實(shí)時(shí)監(jiān)聽RAM,所以調(diào)試時(shí)運(yùn)行速度慢,不適合和實(shí)時(shí)性要求較高的外圍模塊一起聯(lián)調(diào)
總結(jié)
以上是生活随笔為你收集整理的调试笔记--keil 断点调试小技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 学习笔记(12)hex文件转bin
- 下一篇: 调试笔记--keil 测量周期小技巧