Keil調試程序如何查看變量


第一個問題:調試時候想實時查看某一變量變化?

 

view 菜單下的 watch windows,全局變量才能查看

 

比如要查看u8 adcx的值變化,如下:

全速運行后,如下:

無法查看!什么問題?

該變量非全局變量!

解決辦法: 
必須是當前斷點處所在的函數里面有這個參數才行,或者是全局變量.

將變量adcx改為全局變量:

調試狀態下,鼠標選中變量后點右鍵,彈出的菜單有增加到變量窗口一欄,添加到watch #1 watch #2都可以。

 

函數里面的局部變量用j-link硬件調試,看不到那些值嗎?

 

當然可以看 
有個Call Stack的窗口,就可以看當前函數里面的所有變量值.

在call stack的窗口上看不到值 顯示<not in scope>,是什么意思?

意思就是不再范圍。。。 
無法顯示。 

加violate關鍵字。

 

請問怎么加啊  violate  int a=0;下面都是錯誤了

 

看局部變量的值,你在該局部變量所在的函數里,打個斷點,程序運行到該位置了,才能顯示局部變量的值。

 

 

第二個問題:Watch1窗口中變量adcx值不能實時顯示?

解決方法:

調試狀態下,勾上View->Periodic Window Update

要的不是這個顯示,是要提高顯示的刷新頻率

 

第三個問題:調試時候如何查看局部變量?

watch框內的變量只有在當前變量作用域的才可以添加,例如全局變量。局部變量即使添加后,在下次調試時也會從watch窗口移除,改到locals窗口內顯示。locals窗口是查看當前函數處內部變量值得窗口。

 

 watch框內的變量只有在當前變量作用域的才可以添加,例如全局變量。局部變量即使添加后,在下次調試時也會從watch窗口移除,改到locals窗口內顯示。這個 ' 符號似乎是表示該變量是上次調試時定義的,好像沒其他什么作用。做過測試,只要成功被記錄進watch窗口的全局變量,即使該量的物理地址發生了變化,下次調試時調試器也能准確跟蹤到,並在watch內刷新結果。locals窗口是查看當前函數處內部變量值得窗口。不要被誤導。如果在WATCH窗口看內部變量,會是錯誤的。誤導你的!!!!!!!!!!!!

我的理解:Call Stack + Local窗口變量自動的添加,取決於程序設置斷點停止的位置有哪些局部變量和顯示停止時刻的值。斷點作用域改變,窗口中的變量名也隨之改變。程序運行狀態無法顯示。

上面圖片源自於:KEIL help文檔

 

當進入程序狀態時,觀察窗口默認的頁面是“locals",這個窗口頁面會動態顯示當前模塊變量(即局部變量和全局變量),一旦模塊變了(即 域 變了),屬於這個模塊(域)的局部變量就不會在在這窗口頁面出現的。所以說這個窗口頁面是動態顯示就是這個原因。

觀察窗口的其它頁面,如"watch #1"等等,這里是觀察指定的變量的地方,可以指定任何一個!,如:PC。當指定某一局部變量時,如果指定的這一時刻沒有定義這個變量,這個指定變量就顯示為“?????”,當定義后,它就有值。如果有兩個同名的變量,有兩種情況。第一:域窄的被域廣的取當,即不能顯示域窄的變量。第二:域沒有關系,第一次出現的局部變量被顯示,以后的同名變量不能被顯示。
調試狀態下,鼠標選中變量后點右鍵,彈出的菜單有增加到變量窗口一欄,添加到watch #1 watch #2都可以。

call stack是調用堆棧里的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM