如果你做嵌入式開發,那你一定得對程式斷點(program breakpoint)和資料斷點(data breakpoint)有所了解。程式斷點你可能還聽說過,但資料斷點就有可能不是很了解了,更有可能不知道如何去用了!現在,就讓我們去了解所有型別的「斷點」吧!
程式斷點就是指處理器指令斷點,通俗的說就是:當程式執行到某個地方時,我們希望程式停下來,即程式「斷」了!停下來的目的,就是給我們檢查當前程式執行的狀態的機會。對於軟體開發人員來說,對於程式斷點一點都不陌生,它是我們除錯程式的必需手段。但對於嵌入式開發,我們還得對程式斷點進行區分:軟體程式斷點和硬體程式斷點。
為了說明硬體程式斷點,我們先要了解軟體程式斷點是如何實現的。你想過了嗎?軟體程式斷點到底是如何實現的?當你用visual studio進行軟體開發時,你可以設定很多的斷點,對不?我們知道,如果處理器在執行的過程中,如果碰到了一條非法的指令,那會出現乙個異常中斷,程式也會停了下來。軟體程式斷點就是利用這個特性來實現的,當我們設定乙個斷點時,除錯工具就在我們所想設定的程式位置上放置一條非法的指令,同時保留原來的指令。當程式執行時,一旦執行到了我們設定了斷點的地方,即現在指令是非法的位置,處理器就會產生乙個異常中斷從而停了下來。當然,除錯工具會接管這一中斷,並在中斷服務程式中,將儲存的原來的指令恢復回去。當然,於此同時也會給程式設計師除錯程式的機會,並由程式設計師決定什麼時候繼續執行程式。從理論上說,軟體程式斷點可以設n個,這裡的n趨近於無窮(當然記憶體不允許?)。
有了軟體程式斷點的概念,那麼就好理解硬體程式斷點了。在介紹硬體程式斷點時,我們先要問一問,為什麼要引入硬體程式斷點。引入一種新的概念,往往意味著老的概念存在一定的侷限性。那軟體程式斷點存在什麼侷限性呢?想想看,在嵌入式系統中,如果我們想除錯乙個boot loader(參見《
什麼是boot loader
》一文),而此時處理器還在執行位於flash中的程式,此時軟體程式斷點這種方法還有效嗎?當然不行,因為flash中的內容並不能像記憶體一樣,被處理器通過乙個寫操作直接更改。在flash中更改內容(或稱對flash進行程式設計)存在一定的協議,而顯然處理器不會去實現這一協議的,這會嚴重影響處理器的通用性。此外,即使實現了,其效率也不會高。即然這樣,軟體程式斷點不能運用到boot loader的除錯中去。解決方法時什麼呢?就是處理器提供一定的暫存器用於存放程式的斷點位置,當我們通過除錯工具設定斷點時,除錯程式會將所需中斷的指令位址放入到處理器的程式中斷暫存器中。顯然,處理器的這種暫存器是有限的,因此,我們不能設定n個。
現在讓我們說一說資料斷點。試想想,當我們在除錯程式時,如果發現所定義的乙個資料結構中的某乙個值總是被意外的更改。根據我們的經驗,這種意外更改是因為程式中存在bug的緣故。在這種情況下,我們很難找出根源在哪兒。如果處理器有一種功能,當某塊記憶體區或具體的位址被意外更改時,停下來就好了。這就是資料斷點的作用!處理器如果提供這種功能,我們能更方便的找出出錯的根源。高階的處理器往往提供這種功能!類同的是,處理器的資料斷點也是通過處理器提供相應的設定暫存器來實現的,當然也是有限的!
現在讓我們看一看,處理器處理硬體程式斷點與資料斷點的區別是什麼。對於硬體程式斷點,我們知道,處理理器需要從記憶體中取指,而處理器也有乙個程式指標pc(program counter),通過將pc值與我們所設定的程式斷點位置值相比較,處理器就可以實現硬體程式斷點了。但資料指令就不一樣了,處理器必須監聽位址匯流排,當發現有向關心的位址寫資料時,就中斷程式的執行。
相信讀過這篇文章後,你聽到軟體程式斷點、硬體程式斷點和資料斷點時,一定很坦然了。最後,我想指出的是,如果你正在為你的嵌入式產品選擇處理器,考慮處理器是否支援資料斷點是很有必要的!
本文出自 「至簡李雲」 部落格,請務必保留此出處
coredump 斷點 Linux 斷點原理與實現
前言 從事程式設計工作的我們,總有除錯的時刻,不管是通過 ide 除錯開發中的 還是通過 gdb 排查正在執行的程序。特別是經常使用 gdb 的童鞋,對它提供的強大功能更加如數家珍,其中就不乏 breakpoint 斷點 剛好最近做到 ptrace 相關的實驗,也順便擼了這篇小文來分享下 斷點 當中...
gdb斷點相關3 臨時斷點 條件斷點 忽略斷點
include include typedef struct ex st int main int argc,char argv printf d,d,d,d n st.a,st.b,st.c,st.d return0 在使用gdb除錯時,如果想讓斷點只生效一次,可以使用tbreak命令 縮寫為tb...
OD硬體斷點,OD記憶體斷點,API斷點
一.設定硬體寫入斷點 9 i0 b m a8 8 w8 u f q q r w0 s,k9 h s.2 l w1 d8 r8 j a 0 v4 o r q at r p a l y h 在指定位址進行反 彙編 g m d q e d b,a l x x 7 l h.r d t8 k1 4 follo...