Keil 調試之堆棧溢出調查

在進行嵌入式多任務系統軟件開發,可能會出現堆棧溢出的問題,並且該問題可能是隨機出現,因此調查較麻煩。藉助keil 的數據斷點功能,可以輕鬆找到產生堆棧溢出的位置。

在程序調試時,常規使用的斷點是程序斷點,本文提到的則是一種數據斷點。以下將列出具體的調試方法。

1、任務的堆棧溢出一般是棧底溢出,在編譯完成之後。如果堆棧通過固定地址分配,則通過查詢keil 生成的.map獲取棧底地址;否則需要在任務創建過程中分配的堆棧時獲取棧底地址,將堆棧地址變量“pxNewTCB->pxStack”添加到變量監視區。

2、在獲取到堆棧地址之後,在該變量上單擊右鍵選擇“數據訪問斷點”

3、在彈出的對話框中,選中“Write”選項,根據需要設置Count的值。如果stack堆棧在系統初始化時有初始化過程,則需要將該值Count值設置爲2,否則一般設置爲1即可以捕獲程序意外設置該堆棧的位置。

                                              

 

4、斷點設置好之後,就等着堆棧溢出發生了,如果程序意外設置了該數據內容,則程序會停下來,此時即可得到發生堆棧溢出的程序位置,進行展開調查了。

 

在上述操作中,如果堆棧地址通過固定分配。則通過map文件中的變量查詢來獲取該地址。在命令輸入窗口輸入命令即可以設置該數據訪問斷點。

         bs write 0x20002000,1

                       

 

更多斷點的高級應用可以參考另外一篇博文

https://blog.csdn.net/guangod/article/details/99573665

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章