IAR嵌入式軟件編程調試技巧:數據斷點追溯Data變化、CallStack查看當前執行函數、設置堆棧、Memory、多次執行斷點、編譯文件含義等


使用數據斷點:

1、選中某一個數據,點擊右鍵->Set Data Breakpoint:
這裏寫圖片描述/2、在彈出頁面選擇該Data斷點實現的條件,例如該Data的讀、寫,或者可以在Conditions中設置斷點產生條件,如Data == 100時進入斷點。以及通過Action 在斷點執行時產生相應的動作。
這裏寫圖片描述


Set next statement 再次執行到當前斷點

如果斷點已經執行完,還想繼續跳到該斷點,可以在斷點處右鍵,選擇Set next statement

這裏寫圖片描述


設置堆棧大小

1、右鍵工程目錄選擇Options:
這裏寫圖片描述
2、依次選擇Linker -> config,然後點擊Edit,選項卡選擇Stack/Heap Size,編輯實際堆棧大小:
這裏寫圖片描述


Call stack查看當前正在執行的所有函數:

在Debug模式下,IAR菜單欄選擇View -> Call Stack,執行到某一斷點時,就可以清晰的看到當前斷點時刻,所調用的函數等信息
這裏寫圖片描述

好多攻城獅都會有疑問,這裏多說明一下,什麼是Call Stack:
Call Stack:調用堆棧,(當前函數執行過程的空間展示)
當發生函數調用的時候,棧空間中存放的數據是這樣的:
1、 調用者函數把被調函數所需要的參數按照與被調函數的形參順序相反的順序壓入棧中,即:從右向左依次把被調函數所需要的參數壓入棧;
2、 調用者函數使用call指令調用被調函數,並把call指令的下一條指令的地址當成返回地址壓入棧中(這個壓棧操作隱含在call指令中);
3、 在被調函數中,被調函數會先保存調用者函數的棧底地址(push ebp),然後再保存調用者函數的棧頂地址,即:當前被調函數的棧底地址(mov ebp,esp);
4、 在被調函數中,從ebp的位置處開始存放被調函數中的局部變量和臨時變量,並且這些變量的地址按照定義時的順序依次減小,即:這些變量的地址是按照棧的延伸方向排列的,先定義的變量先入棧,後定義的變量後入棧;

所以,發生函數調用時,入棧的順序爲:
  參數N
  參數N-1
  參數N-2
  …..
  參數3
  參數2
  參數1
  函數返回地址
  上一層調用函數的EBP/BP
  局部變量1
  局部變量2
  ….
局部變量N


使用Memory查看數據內容

例如查看某個指針指向的數據內容:
Debug模式下,右鍵Watch 一個char *的指針dataC,這時只能看到指針指向的第一個數據:
這裏寫圖片描述
同樣在View菜單下,點擊Memory1,將dataC指針存放的地址放到Goto的內容欄中,即可查看數據內容:
這裏寫圖片描述


IAR各編譯文件含義:

.dep文件
ide所使用的文件依賴信息,這個會自動生成的,可以刪掉
.ewp文件
工程文件/project,包含代碼,編譯,鏈接選項等,不包含調試設置等信息,這個不能刪
.ewd文件
工程調試設置,保存的是IAR設置中的Debugger選項,這個最好不要刪
.eww文件
解決方案/工作空間/workspace,可以直接雙擊打開,可以放多個工程文件,最好也不要刪


IAR更改字體

在代碼框郵件Option,如下圖所示,依次點擊左側Editor->colors and fonts
其中Common Fonts是console和其他縣市的字體,Editor是代碼字體。

這裏寫圖片描述

歡迎轉載,Howie原創作品,本文地址:

http://blog.csdn.net/HowieXue/article/details/80381023

謝謝

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