IAR除錯按鈕功能說明及除錯主要看哪些內容

2021-08-30 06:25:01 字數 2963 閱讀 5743

iar除錯按鈕功能說明

先來看常用的快捷鍵:

全速執行:f5

單步執行:f10

加斷點/取消斷點:ctrl+f9

退出除錯:ctrl+shift+d

注釋多行:ctrl+k(單行也是這個)

取消注釋:ctrl+shfit+k

用來顯示所有斷點view——>breakpoints

關閉方式是單擊右鍵,選擇delete,如下圖所示:

執行是以指令指標為參照的,在環境中表現為綠色的小箭頭:

指令指標指向的該行,表示的是接下來準備要執行的**行。

復位:指令指標回到開頭,

暫停:使正在奔跑的程式立定

步過:執行當前這句話,如果這句話是函式呼叫,就把整個函式執行完,停在下一句

步入:執行當前這句話,如果這句話是函式呼叫,就進入到函式裡,停在函式的第一句話

步出:一直執行到從當前的函式返回,停在函式返回後的下一句話

下一句:執行c語言的一條語句,停在下一句**上

至游標:一直執行到游標所在行,並停在這一行上

執行:執行到遇到斷點

退出除錯模式:……額,就是退出除錯模式

2.我們主要來看看重點中的重點,樓主比較常用的有以下這些:

breakpoints:也就是斷點

disassembly:反彙編,也就是你寫的程式經過編譯燒寫之後,在微控制器中的樣子

memory:記憶體,可以檢視全部記憶體中的資料,看起來就像一般的16進製制編輯器

symbolic memory:符號記憶體,不但能看到記憶體資料,還能看出來對應程式中的什麼變數

register:暫存器,檢視全部暫存器的內容

watch:觀察,可以根據你的需要,指定檢視什麼,根據樓主的經驗,檢視全域性變數方便一些,在變數可見範圍內,也可以檢視區域性變數和靜態變數(static)

locals:檢視函式區域性(變數等)內容,包括函式的引數

statics:檢視靜態記憶體變數,注意不是指靜態變數(static),而是生命週期是整個程式生命期的變數,原則上不在堆疊中的區域性變數,應該都是靜態記憶體變數。

auto:自動,指的不是c語言中的自動變數,而是指根據指令指標當前的位置,自動顯示出相關的變數

call stack:呼叫棧,表示到當前位置的函式呼叫順序圖

stack:棧,就是棧的資料表示

3.除錯技巧

1)關於run to(在工程中project>options>debugger>setup>run to)

預設工程run to的內容是main,這個選項指定了程式除錯的起點,注意這裡寫的是程式除錯的起點並不是程式的起點,而且我們需要明白main不是程式的起點,編譯器把一些初始化工作放在了main之前,比如全域性變數的初始化。那麼我們除錯的時候也可以輸入其它的除錯起點,我們可以指定程式中iar識別的任意標號或者函式名稱。

2)關於在反彙編視窗和記憶體視窗中快速定位函式位置和變數位置

我們經常需要在disassembly視窗中找到指定函式的位置,或者需要在memory視窗中找到指定變數的位置,一般情況下選中函式名稱然後把函式名稱拖放到disassembly視窗,相關函式就會顯示在disassembly視窗中,也可以把變數名稱用相同的操作顯示在memory視窗中。

3)單步除錯速度緩慢的問題

我們在單步除錯過程中如果發現速度緩慢,那麼以下的幾點需要引起我們的注意:

如果使用硬體**系統,我們需要為單步除錯留下足夠的硬體斷點,在除錯中的單步執行通常是用斷點來實現的,通過把斷點設定在下乙個語句後,來完成單步除錯的功能。硬體的斷點數量是有限的,如果沒有可用的硬體斷點,偵錯程式就會在每個彙編指令處停止一下,這樣完成一條完整的語句的所有彙編**越多時間就越長。

在trace和function profiling視窗中使用enable/disable按鈕關閉資料跟蹤功能。因為在每個單步之後要收集這些跟蹤的資料,所以資料跟蹤可能會降低單步的速度。需要注意的是,緊緊關閉相關的視窗是不能關閉資料跟蹤功能的,必須通過enable/disable按鈕來完成。

只開啟有限數量的sfr暫存器視窗,這可以通過2種方法實現。一種是通過在watch視窗中手動輸入sfr暫存器的名字;另一種是建立自定義的特殊功能暫存器組,操作步驟如下,tools>options>register filter>use register filter如下圖:

選擇new group

把關心的sfr放到組中

如果不需要memory和symbolic memory視窗,關閉它們,因為在每個單步之後要讀出這些記憶體資料。

如果不需要watch,live watch,locals,statics視窗,關閉它們,原因同上。

關閉stack視窗和相關的設定,tools>options>stack,去掉enable graphical stack display and stack usage tracking的選擇,如下圖:

如果可能,提高偵錯程式和目標板的通訊速度。

4)關於call stack(在工程中view>call stack)

如下圖:

iar整合環境產生大量的支援資訊,這允許除錯過程中在沒有執行損失的情況下顯示完整的函式呼叫鏈。這通常會幫助我們確定目前函式的上下文,跟蹤變數和引數中的不正確值的**從而定位出現的問題。

5)efm_assert巨集的合理應用

efm32的cmsis庫中有乙個巨集被大量的應用,它的名字叫efm_assert。這個巨集應用了2個引數,乙個是__file__,乙個是__line__,這在iar中分別表示檔名和檔案內的行號。這2個引數可以直接告訴我們出現問題的檔案和所在的行。

以下通過乙個具體的efm32**來看看以上提到的幾點的應用。

為了演示gpiosetup內部的問題,我們可以把程式除錯的起點直接設定到gpiosetup,如下圖:

然後全速執行程式,發現程式停在了assertefm函式內部,通過view>locals,如下圖:

可以看到問題出在em_gpio.c的270行,該行正是gpio_pinmodeset函式的第乙個語句。

我們再通過view>call stack,如下圖:

可以快速的定位到問題出在以下位置,如下圖:

HttpDNS功能說明及實現

httpdns使用http協議進行網域名稱解析,代替現有基於udp的dns協議,網域名稱解析請求直接傳送到阿里雲的httpdns伺服器,從而繞過運營商的local dns,能夠避免local dns造成的網域名稱劫持問題和排程不精準問題。功能說明 防劫持繞過運營商local dns,避免網域名稱劫持...

Asterisk功能說明及基本呼叫流程

asterisk功能說明及基本呼叫流程 1.asterisk內部核心 共分為6個部分 a.pbx核心交換模組 b.排程和io管理模組 c.應用呼叫模組 d.編碼轉換模組 e.動態模組載入器模組 f.cdr生成模組 即時呼叫詳細記錄報告 2.asterisk基本呼叫流程 1 通過asterisk的乙個...

python中pow函式用法及功能說明

冪運算是高更數學的應用學科,是一種關於冪的數 算。同底數冪相乘,底數不變,指數相加。同底數冪相除,底數不變,指數相減。冪的乘方,底數不變,指數程式設計客棧相乘。適用於精確計算領域。計算機作為精確計算的一種方式,含有大量的冪運算。在python中就有內建函式pow函式表示冪的運算。1 pow 函式 p...