如何在IAR中通過(guò)Watch窗口觀察局部變量的值
最近在用430開發(fā)一款產(chǎn)品,在軟件調(diào)試的時(shí)候發(fā)現(xiàn)Watch窗口中無(wú)法觀察局部變量的值,總是顯示,下面通過(guò)一個(gè)簡(jiǎn)答的例子說(shuō)明一下現(xiàn)象:
#include"msp430g2553.h"/*Globalvariable*/unsignedcharReceiveGlobal;unsignedcharaddxy(unsignedcharx,unsignedchary){unsignedcharz;z=x+y;returnz;}voidmain(){/*Localvariable*/unsignedcharReceive0;staticunsignedcharReceive1;volatileunsignedcharReceive2;Receive0=addxy(0,1);Receive1=addxy(1,2);Receive2=addxy(3,4);ReceiveGlobal=addxy(5,6);while(1);}1234567891011121314151617181920212223242526
在while(1)處設(shè)一斷點(diǎn),在Debug模式下通過(guò)Watch窗口觀察變量:
現(xiàn)在回過(guò)頭去看IAR中的”O(jiān)ptions%20—%20c/c++%20compiler%20—%20Optimization[??ptimai?zei??n]%20—%20Level”%20選項(xiàng):
Level的缺省值為L(zhǎng)ow,當(dāng)我把Level選為None之后,即不執(zhí)行任何優(yōu)化時(shí),全局變量、靜態(tài)局部變量、局部變量的值都可以看到,如下圖所示。
當(dāng)我把優(yōu)化等級(jí)選為Midium或者High之后,全局變量、靜態(tài)局部變量、局部變量的值都不可見(jiàn)了。
結(jié)論:要想觀察局部變量的值,調(diào)試的時(shí)候可以把優(yōu)化等級(jí)設(shè)為None.
補(bǔ)充幾個(gè)知識(shí)點(diǎn):
1.堆棧(stack)——由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。
2.靜態(tài)存儲(chǔ)區(qū)(static)—— 全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的。初始化的全局變量和靜態(tài)變量在一塊區(qū)域;未初始化的全局變量和靜態(tài)變量在相鄰的另一塊區(qū)域。程序結(jié)束后由系統(tǒng)釋放。