日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式大雜燴
[導(dǎo)讀]對(duì)于程序員來說,debug的時(shí)間往往比寫程序的時(shí)間還要長(zhǎng)。尤其對(duì)我這種專寫bug為主的程序員來說,正確使用斷點(diǎn)調(diào)試是提高效率的有效方法。今天我們聊聊如何高效率的斷點(diǎn)調(diào)試,由于工作中IAR為主力IDE,本篇文章主要以IAR為主。01普通斷點(diǎn)打開IDE,如下圖,我們想在程序運(yùn)行到第1...

對(duì)于程序員來說,debug的時(shí)間往往比寫程序的時(shí)間還要長(zhǎng)。尤其對(duì)我這種專寫bug為主的程序員來說,正確使用斷點(diǎn)調(diào)試是提高效率的有效方法。今天我們聊聊如何高效率的斷點(diǎn)調(diào)試,由于工作中IAR為主力IDE,本篇文章主要以IAR為主。


01普通斷點(diǎn)
打開IDE,如下圖,我們想在程序運(yùn)行到第104行時(shí)停止運(yùn)行,我們?cè)谙聢D中104行號(hào)前單擊,這時(shí)該語句上將出現(xiàn)紅色的斷點(diǎn)標(biāo)記。如下圖:



或者點(diǎn)擊要設(shè)置斷點(diǎn)的語句,按鼠標(biāo)右鍵,選擇Toggle Breakpoint (Code)。


02條件斷點(diǎn)
除了上述最普通的斷點(diǎn)外,有時(shí)候我們需要斷點(diǎn)在一定條件下觸發(fā),例如上面的代碼,希望在num等于100時(shí)程序暫停。這個(gè)時(shí)候有兩個(gè)最常用方法:


1、最笨的方法就是手動(dòng)運(yùn)行100次即可,如果是一次兩次的還可以,運(yùn)行100次顯然不現(xiàn)實(shí)。


2、寫一個(gè)判斷語句,當(dāng)num等于100時(shí)執(zhí)行某個(gè)語句,把斷點(diǎn)打在這個(gè)語句上如下:



這種方法可行,也很缺陷:當(dāng)代碼開了優(yōu)化時(shí),某些語句可能被優(yōu)化導(dǎo)致斷點(diǎn)無法運(yùn)行。


這個(gè)時(shí)候,條件斷點(diǎn)就閃亮登場(chǎng)了。


在打好斷點(diǎn)之后,進(jìn)入debug模式,然后在IAREWARM的選項(xiàng)欄選擇View-> Breakpoints 窗口查看所設(shè)置的斷點(diǎn),右鍵已設(shè)置的斷點(diǎn),選擇Edit進(jìn)行配置斷點(diǎn)。



我們希望當(dāng)num等于100時(shí)暫停程序,那么我們下圖紅框內(nèi)填寫num==100。當(dāng)然也可以設(shè)置(num>= 10)和(num<= 10),類似C語言中使用的==、>=、<=。



程序全速運(yùn)行時(shí),當(dāng)程序運(yùn)行到104行,且num等于100時(shí)就會(huì)暫停,如下圖



注意我上面的用詞“且”,這時(shí)候斷點(diǎn)觸發(fā)的條件時(shí)運(yùn)行到104行和num等于100同時(shí)滿足時(shí),如果將斷點(diǎn)打到其他行也是一樣的效果,如下圖:



03數(shù)據(jù)斷點(diǎn)
看完上面的描述,有些同學(xué)就要問了,如果我就想要num等于100時(shí)暫停,不要同時(shí)滿足其他條件,為什么有這樣的需求呢?在實(shí)際的開發(fā)過程中,會(huì)碰到很多數(shù)據(jù)“異?!钡那闆r,比如在一個(gè)代碼量很大的工程中,有個(gè)變量突然變成1,卻無法很快定位到那句代碼修改的。


這時(shí)候數(shù)據(jù)斷點(diǎn)(非官方叫法,個(gè)人叫法)就閃亮登場(chǎng)了。值得注意的是,數(shù)據(jù)斷點(diǎn)只對(duì)全局變量有效。


進(jìn)入debug模式,然后在IAREWARM的選項(xiàng)欄選擇View-> Breakpoints 窗口查看所設(shè)置的斷點(diǎn),空白處右鍵選擇NewBreakpoint,然后選擇Data。



在1處填寫num,表示要監(jiān)控的變量,選擇2處Enable,在3處寫入0x00000064,表示當(dāng)num等于100時(shí),暫停程序。



測(cè)試結(jié)果如下



眼尖的同學(xué)可能已經(jīng)注意到,Accesstype選項(xiàng),我們這個(gè)選擇的是Read/Write,表示無論是讀操作還是寫操作,當(dāng)num等于100時(shí),都會(huì)暫停程序。


當(dāng)選擇Read時(shí),只有讀num等于100時(shí)才會(huì)暫停程序,當(dāng)選擇Write時(shí),只有寫num時(shí)num等于100,才會(huì)暫停程序


對(duì)比如下圖,一個(gè)停在了106行,一個(gè)停在了104行,具體原因這個(gè)是C語言的基本知識(shí),這里不再贅述。



注意:


1、對(duì)于Cortex-M 設(shè)備,只能設(shè)置一個(gè)帶有匹配數(shù)據(jù)的斷點(diǎn)。而且這樣的斷點(diǎn)使用兩個(gè)硬件斷點(diǎn)。


2、調(diào)試設(shè)備僅限于I-jet,JTAGjet,J-Link/J-Trace 和ST-LINK,如果使用的自制的CMSIS-DAP是不支持的。


04總結(jié)
在新建斷點(diǎn)時(shí),還有l(wèi)og,Datalog等等,這些我用得不多,上面主要介紹了我常用的打斷點(diǎn)的方式,希望對(duì)大家有幫助,原創(chuàng)分享不易,大家喜歡的話,點(diǎn)個(gè)在看,不想點(diǎn)在看,點(diǎn)個(gè)贊也可以。







本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉