keil利用Breakpoints追蹤內存值異常修改分析說明

在開發過程中,經常會遇到內存值被異常篡改的情況。而且,篡改者往往並不是你當前所正在進行調試的部分(即內存異常篡改其實早就存在,只不過現在才凸顯出來),這樣問題很難跟蹤,故利用keil的這一特性,追蹤問題。

以下項目舉例說明

1. 用電設備,A相電壓偏差極值顯示63.25%,而此時額定電壓爲220v,A相單相上電,偏差值不應
   有這麼大偏差值計算公式爲:

    ΔU = ((U - Un) / Un) * 100%;

    式中:△U--電壓偏差百分比;U一實際電壓:Un電網標稱電壓。

2. 觀察ac_data_memory中相應數據顯示確實爲這麼大,考慮數據調試過程中異常,故對到下一
   日,對時後,數據變爲0,1分鐘後變爲60+%(其實是有做統計數據,但此時並未往這方面想)。

3. 經過2的分析後,確定一定是有某個地方對這塊內存操作了,故使用推薦方法跟蹤是哪個地方在
   操作內存。

4. 查看內存地址:

內存地址

5. 添加此內存地址(0x20017B27)到Breakpoints,Debug->Breakpoints,如:

breakpoints

6. 添加步驟如下圖:

添加步驟

7. 全速運行,當訪問者修改這片內存時,程序會中斷,這時斷點的位置就時訪問者。如:

全速運行結果

8. 問題定位。

注意事項

使用中並不能100%命中,不能過分依賴。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章