當(dāng)前位置:首頁 > 公眾號(hào)精選 > 嵌入式微處理器
[導(dǎo)讀]大家好,我是bug菌!最近看到一個(gè)小伙子調(diào)bug,那簡(jiǎn)直是苦不堪言,斷點(diǎn)是打了無數(shù)個(gè),日志是打印了一大堆??上攵?,這樣調(diào)試bug的過程是痛苦的,特別是一些莫名其妙的bug。而更可惱的是,有時(shí)候項(xiàng)目、客戶、boss還要在旁邊催,估計(jì)大部分工程師都想一鼠標(biāo)鍵盤砸過去了……不過,非常...


大家好,我是bug菌!最近看到一個(gè)小伙子調(diào)bug,那簡(jiǎn)直是苦不堪言,斷點(diǎn)是打了無數(shù)個(gè),日志是打印了一大堆??上攵?,這樣調(diào)試bug的過程是痛苦的,特別是一些莫名其妙的bug。而更可惱的是,有時(shí)候項(xiàng)目、客戶、boss還要在旁邊催,估計(jì)大部分工程師都想一鼠標(biāo)鍵盤砸過去了……
不過,非常時(shí)刻還是要有非常手段,畢竟有些bug是毀滅性的,動(dòng)不動(dòng)一個(gè)小時(shí)損失幾W的場(chǎng)面那是多么可怕的。
我覺得解決bug主要是兩個(gè)方面:
1、解決bug過程的思路一定要清晰,不要全憑感覺,東打一槍,西轟一炮,調(diào)試過程要有步驟有依據(jù),更不要在代碼中注釋類似于"把這行代碼屏蔽就可以正常運(yùn)行這樣的注釋了~~"


2、理論知識(shí)要完備,包括問題的專業(yè)知識(shí)和高效的調(diào)試技巧知識(shí),對(duì)這一塊功能設(shè)計(jì)理解都不透徹怎么根除問題呢?
今天主要是跟大家介紹一下條件斷點(diǎn)(統(tǒng)稱,下面類似)如何使用,可以說有一半以上的軟件工程師很少、甚至沒有用過條件斷點(diǎn),這可是調(diào)試bug的神器,為何不好好利用起來呢?難道一定要一個(gè)個(gè)普通斷點(diǎn)的調(diào)試才更帶感嗎?

1

Keil中的調(diào)試斷點(diǎn)


我們可以找到Debug調(diào)試中的Breakpoints選項(xiàng)進(jìn)入該工程中所有設(shè)置斷點(diǎn)的具體信息:



上圖展示了03和04兩個(gè)斷點(diǎn),分時(shí)標(biāo)注了用戶所設(shè)置斷點(diǎn)的位置。其實(shí)你完全可以把這種普通斷點(diǎn)看成是條件斷點(diǎn)的一種,其條件就是當(dāng)程序運(yùn)行到如上所設(shè)置的地址處就會(huì)終止運(yùn)行,只是說這樣的普通斷點(diǎn)可以直接在所編寫的程序中點(diǎn)擊設(shè)置。


然而面對(duì)更加復(fù)雜的條件斷點(diǎn),似乎Keil并不能為用戶更好的提供展示,也是就有了上圖的斷點(diǎn)設(shè)置對(duì)話框,但又擔(dān)心我們不知道怎么用,于是就有了一個(gè)help跳轉(zhuǎn)到幫助文檔供我們查閱。


可以說在help里面幾乎把每一項(xiàng)的功能都說得很清楚了,并且藍(lán)色部分可以點(diǎn)擊進(jìn)入進(jìn)一步詳細(xì)說明,所謂“授人以魚不如授人以漁”,bug就不啰嗦了,下面是help里面的實(shí)例,照著來即可~



不過,這里還是簡(jiǎn)單介紹一下Keil中為用戶提供了三類斷點(diǎn):


  • 訪問斷點(diǎn)(A)

此類斷點(diǎn)是設(shè)置了讀或?qū)憳?biāo)志,或同時(shí)設(shè)置了這兩個(gè)標(biāo)志的時(shí)候使用的。當(dāng)指定的內(nèi)存訪問發(fā)生時(shí)觸發(fā)斷點(diǎn),這就非常有用了,有了它你調(diào)試程序的害怕數(shù)組越界嗎?變量被篡改嗎?


可以選擇指定內(nèi)存訪問窗口的大小(以字節(jié)為單位)或作為表達(dá)式的對(duì)象大小。對(duì)于此斷點(diǎn)類型,表達(dá)式必須解析為內(nèi)存地址和內(nèi)存類型,允許的操作符?(
嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(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)閉
關(guān)閉