BUG 終結者,現場抓獲!|顛覆認知

來源:公衆號【魚鷹談單片機】

作者:魚鷹Osprey

ID   :emOsprey

不知道你是否有這樣的經歷,測試的機器運行半個月、一個月的都沒啥問題,突然就死機了,或者運行錯誤了,總之莫名其妙。

但是此時,你的調試器已經從機器上拔下來了,無法在線調試觀察死機後的現場了,你無法觀察到你的變量、寄存器、外設、堆、處於什麼情況,這個時候你不得不重新接上調試器,再次運行程序以等待問題的出現。

這個笨方法存在幾個問題:

第一、因爲復現率太低,所以你的電腦必須一直連接電腦,否則問題出現了無法確認。

第二,萬一中途因爲各種原因(線拔了,KEIL意外退出了)導致調試器和機器的連接出現了問題,那麼只能重來了。

第三,可能運行幾個月都不會再出問題,但是你卻知道,這裏隱藏了一個炸彈,指不定什麼時候就爆了;更有甚者,可能連接調試器後這個問題可能就沒有了,但是斷開之後就又有問題了。

針對以上問題,我們就會想,是否存在一種方法,能夠在出現問題之後,可以使用調試器抓獲現場環境呢?

我們都知道,KEIL 環境下,連接調試器後,單片機進入調試模式時,KEIL會自動將整個單片機進行復位(可能是內核復位,也可能是系統復位,也可能是RST引腳復位),復位操作對於剛下載的程序而言,可以很方便的幫助開發者更方便的進入調試環境,但是對於機器的問題現場而言,這是在破獲現場!

但是根據以往的認知,我們總是以爲進入調試模式時,必然需要先進行單片機復位的,所以我們對這種難復現的BUG總是感到無能爲力。

今天,魚鷹教大家一個方法,如何使用 KEIL 調試器抓獲 STM32 的BUG現場(其他單片機可自行測試),這個方法將顛覆你的認知,可以在單片機運行時進入調試模式,從而抓獲現場!

這個功能其實在某一個軟件是集成了的(不記得哪一個軟件了),但在 KEIL 中我們需要幾步操作完成。

1、新建一個工程目標(可命名爲 NotRest):

這樣你可以看到你現在的目標:

接下來的所有操作都在這個目標進行。

事實上,如果只是爲了抓獲 BUG 現場,是不需要新建目標的,但是爲了今後可以方便的不復位單片機也能進入調試模式,也爲了不改變以前目標的配置,增加一個目標還是很有必要的,這樣,你可以根據需要(是否復位芯片)切換目標了。

2、新建一個load.ini文件,文件內容如下:

LOAD %L INCREMENTAL

該文件用於加載 axf 文件到 KEIL 中,但是不會下載到單片機中,而 axf 文件可以方便我們進行源碼級別的調試。

3、打開該目標的option進行配置:

4、點擊仿真按鈕,記住了,別點下載按鈕(魚鷹非常不喜歡別人先點下載按鈕再點仿真按鈕,因爲編譯後的代碼,如果你直接點仿真按鈕,在默認配置下會自動下載和進入調試模式的,比較方便)。

注意,一定要確定該目標可以正常使用(即不會復位單片機)才能真正用於實際的BUG現場,不要沒有做測試就直接拿它去調試實際的單片機,否則可能因爲沒有正確配置,而破壞了現場環境(默認配置下,會直接復位單片機)!

點擊【閱讀原文】可看官網描述。

推薦閱讀:

線程CPU使用率到底該如何計算?

許久以後,你會感謝自己寫的異常處理代碼

終極串口接收方式,極致效率

爲什麼說你一定要掌握 KEIL 調試方法?

延時功能進化論(合集)

指針,很難嗎?| 解析指針的過程與意義(一)

如何寫一個健壯且高效的串口接收程序?

KIEL 調試那些事兒之窗口展示——變量(二)

打了多年的單片機調試斷點到底應該怎麼設置?| 顛覆認知


1.知情人爆國產天賜操作系統內幕

2.爲什麼Linux系統默認頁大小是4KB?

3.c語言設計模式--狀態模式(狀態機)

4.C語言設計模式--簡單工廠模式

5.駁《我國工業軟件失去的30年》一文:生不出孩子怪天氣

6.面向5G,中國移動重磅發佈物聯網操作系統——OneOS!

免責聲明:本文系網絡轉載,版權歸原作者所有。如涉及作品版權問題,請與我們聯繫,我們將根據您提供的版權證明材料確認版權並支付稿酬或者刪除內容。

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