驚呆!MDK當(dāng)計(jì)算器使用?
今天魚鷹介紹一個(gè)小知識(shí)點(diǎn),那就是如何在調(diào)試時(shí)進(jìn)行計(jì)算。
在開發(fā)調(diào)試過(guò)程中,難免會(huì)遇到調(diào)試過(guò)程中需要臨時(shí)計(jì)算的情況,有些時(shí)候可能還需要?jiǎng)討B(tài)的得到計(jì)算結(jié)果。
很多時(shí)候,我們都會(huì)打開 Windows 自帶的計(jì)算器,這確實(shí)一種解決方式,但是難免顯得麻煩,而對(duì)于需要多次計(jì)算的情況來(lái)說(shuō),更是如此。
那么是否有更好的解決方式呢?
當(dāng)然有,就是使用 MDK 自帶的命令行進(jìn)行計(jì)算。
進(jìn)入調(diào)試模式后,MDK 自動(dòng)會(huì)打開一個(gè)命令窗口,但估計(jì)絕大部分人都不知道這個(gè)窗口可以干什么用,今天魚鷹就介紹一個(gè)與此有關(guān)的使用,就是計(jì)算。
比如輸入以下公式(實(shí)際上,這里可以使用全局變量計(jì)算或當(dāng)程序停在局部函數(shù)時(shí)計(jì)算局部變量),得到結(jié)果為 0x04。
你會(huì)發(fā)現(xiàn)即使使用括號(hào),也能計(jì)算出結(jié)果,比Windows自帶的計(jì)算器強(qiáng)。
那么現(xiàn)在就看計(jì)算結(jié)果是否正確了。
如果我們的小學(xué)數(shù)學(xué)過(guò)關(guān)的話,這個(gè)結(jié)果應(yīng)該是 5。
但結(jié)果卻是 4,還是按照 16 進(jìn)制顯示的。
仔細(xì)想想你就知道,這里的計(jì)算完全按照 C 的表達(dá)式形式進(jìn)行計(jì)算的(命令行下提示 C- style),這樣看來(lái)計(jì)算結(jié)果沒(méi)有問(wèn)題。
那我們嘗試使用浮點(diǎn)進(jìn)行計(jì)算:
發(fā)現(xiàn)結(jié)果是我們想要的,同時(shí)計(jì)算結(jié)果使用十進(jìn)制顯示。
這里就需要注意一點(diǎn),如果說(shuō)你想計(jì)算結(jié)果準(zhǔn)確,那么使用浮點(diǎn)計(jì)算是一個(gè)不錯(cuò)的選擇,否則你就要確定是否是在驗(yàn)證你的 C 語(yǔ)言表達(dá)式是否正確了。
我們會(huì)想,是否可以設(shè)置結(jié)果為十進(jìn)制顯示呢?
偶然情況下,魚鷹發(fā)現(xiàn),這個(gè)結(jié)果顯示和局表變量窗口有關(guān):
也就是說(shuō),如果局部變量顯示為十進(jìn)制,那么計(jì)算結(jié)果也是十進(jìn)制,反之亦然(默認(rèn)十六進(jìn)制顯示)。
所以,現(xiàn)在我們有兩種十進(jìn)制顯示方式:
1、將局部變量窗口設(shè)置為十進(jìn)制顯示
2、使用浮點(diǎn)計(jì)算(比如 1 寫成 1.0),那么結(jié)果一定是十進(jìn)制。
魚鷹推薦第二種方式,比較方便,同時(shí)計(jì)算結(jié)果也不容易出錯(cuò)。
事實(shí)上,除此之外,這個(gè)命令窗口還可以使用 sizeof,比如我想計(jì)算一下 int 的大小,可以這樣:
在這里可能不能體現(xiàn)這個(gè)命令窗口的優(yōu)勢(shì),但如果說(shuō)你想計(jì)算一個(gè)復(fù)雜的結(jié)構(gòu)體呢?!
還有如果我們想動(dòng)態(tài)的知道兩個(gè)變量的差值(或其他表達(dá)式)怎么辦?
正常情況下,我們會(huì)選擇修改代碼,將結(jié)果存放至全局變量顯示。
但今天魚鷹再介紹一種更簡(jiǎn)單的顯示方式,直接在 Watch 窗口計(jì)算:
但是要注意,如果這兩個(gè)變量修改的很快的話,可能會(huì)突然出現(xiàn)一個(gè)異常值,所以只能作為一個(gè)參考,不能看到一個(gè)異常值就認(rèn)為兩個(gè)變量有問(wèn)題。
但是暫停調(diào)試情況下,計(jì)算結(jié)果是可以相信的。
以上就是魚鷹要分享的 MDK 知識(shí)。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。