介紹
調(diào)試是軟件開(kāi)發(fā)周期中的一個(gè)很重要的部分,有時(shí)很有挑戰(zhàn)性,有時(shí)候則讓程序員迷惑,有時(shí)候讓程序員發(fā)瘋,但是。可以肯定的是,對(duì)于任何不是太那個(gè)微不足道的程序來(lái)說(shuō),調(diào)試是不可避免的。近年來(lái),調(diào)試工具的發(fā)展已經(jīng)使得很多調(diào)試任務(wù)簡(jiǎn)單省時(shí)了。
本文總結(jié)了十個(gè)調(diào)試技巧,當(dāng)你使用VS的時(shí)候可以節(jié)省你很多時(shí)間。
1.懸停鼠標(biāo)查看表達(dá)式

調(diào)試有時(shí)候很有挑戰(zhàn)性,當(dāng)你步入一個(gè)函數(shù)想看看哪塊出錯(cuò)的時(shí)候,查看調(diào)用棧來(lái)想想值是從哪來(lái)的。另一些情況下,則需要添加一些監(jiān)視表達(dá)式,或者查看局部變量列表,這通常還是花費(fèi)一些時(shí)間的,但是。如果你把你鼠標(biāo)指向你感興趣的一個(gè)變量。你會(huì)發(fā)現(xiàn)事情簡(jiǎn)單多了。而且,類和結(jié)構(gòu)體可以通過(guò)單擊展開(kāi)。這樣。你就可以方便快捷的找到你想查看的變量了。
2實(shí)時(shí)改變值

調(diào)試器不僅僅是一個(gè)分析程序崩潰或是異常結(jié)果的工具了,許多bug都可以通過(guò)步入新寫的函數(shù),檢查函數(shù)是否如期望的那樣運(yùn)行來(lái)預(yù)防。有時(shí)候你可能會(huì)好奇“如果條件為真函數(shù)會(huì)正確運(yùn)行嗎”大多數(shù)情況下,根本不需要改變代碼重啟挑起,僅僅把鼠標(biāo)懸停到一個(gè)變量上,雙擊值然后輸入一個(gè)新值就可以了。。
3.設(shè)置下一條語(yǔ)句

一個(gè)典型的調(diào)試情況就是通過(guò)單步跟蹤分析為什么一個(gè)函數(shù)調(diào)用失敗了。當(dāng)你發(fā)現(xiàn)一個(gè)函數(shù)調(diào)用的另一個(gè)函數(shù)返回錯(cuò)誤的時(shí)候你會(huì)怎么做?重啟調(diào)試?有更好的方法。拖動(dòng)這個(gè)黃色的語(yǔ)句標(biāo)識(shí)到你想下一步執(zhí)行的語(yǔ)句前就可以了。比如你剛才失敗的那塊,然后步入。簡(jiǎn)單,不是嗎?
4.編輯然后繼續(xù)

調(diào)試一個(gè)復(fù)雜的程序,或是一個(gè)插件的時(shí)候,在一個(gè)被調(diào)用很多次的函數(shù)處發(fā)現(xiàn)一個(gè)錯(cuò)誤。但是不想浪費(fèi)時(shí)間停下來(lái),重新編譯然后重新調(diào)試。沒(méi)問(wèn)題,僅僅在該處改正代碼然后繼續(xù)單步就可以。VS會(huì)修正程序然后繼續(xù)調(diào)試不需要重啟
注意,編輯然后繼續(xù)有大量的已知限制,首先,64位代碼是不行的。如果他如果為你的C#程序工作。就去工程設(shè)置的生成選項(xiàng),然后目標(biāo)平臺(tái)為x86.不要擔(dān)心。發(fā)布版的目標(biāo)平臺(tái)和調(diào)試的時(shí)候是分開(kāi)的。可以被設(shè)置為任何平臺(tái)。。
第二.編輯然后繼續(xù)改變?cè)谝粋€(gè)方法里應(yīng)該是局部的。。如果你改變了方法簽名,添加一些新方法或是類。你就不得不重啟程序了。或者撤銷改變來(lái)繼續(xù)。改變方法也包含lambda表達(dá)式隱式修改的自動(dòng)生成的代理類,因此也不能繼續(xù)。
5.方便的監(jiān)視窗口

大概現(xiàn)代的調(diào)試器都有一個(gè)監(jiān)視窗口,無(wú)論如何。VS允許你簡(jiǎn)單的添加或移除變量。單擊空行,輸入你的表達(dá)式按下回車,或者是在不需要的表達(dá)式上按下Delete鍵就可以刪除了。
而且。從監(jiān)視窗口你不僅僅可以看到“正常”的變量。你可以輸入
6.帶注釋的反匯編

使用交互式的反匯編模式可以使得優(yōu)化程序的關(guān)鍵部分變得很容易,VS給出對(duì)應(yīng)你代碼每一行的匯編指令,并且運(yùn)行單步運(yùn)行。同時(shí),可以在任何位置設(shè)置斷點(diǎn)。而且,表達(dá)式的查看和修改也像在C++代碼里一樣
7.帶有棧的線程窗口

調(diào)試多線程的程序是痛苦的。。或者也可以是很有趣的。取決于你的調(diào)試器。VS2010真正優(yōu)美的特性是線程窗口的棧視圖,通過(guò)窗口的調(diào)用棧你可以方便的總覽線程。
8.條件斷點(diǎn)

如果你嘗試通過(guò)斷點(diǎn)再現(xiàn)一個(gè)罕見(jiàn)的事件,該情況引發(fā)了一些嚴(yán)重的錯(cuò)誤。你可以添加條件斷點(diǎn)。定義一個(gè)斷點(diǎn)的條件,然后如果條件不成立,VS會(huì)忽略該斷點(diǎn)
9.內(nèi)存窗口

有些bug由不正確的結(jié)構(gòu)體定義引起,忽略的對(duì)齊屬性等等。查看內(nèi)存中的內(nèi)容可以定位然后修復(fù)bug。VS提供了一個(gè)放百年的內(nèi)存窗口,可以把值以8/16/32/64位的形式展示。還有浮點(diǎn)值。也允許實(shí)時(shí)改變他們。就像在文本編輯器里一樣。
10.轉(zhuǎn)到定義

這個(gè)特性不是直接關(guān)于調(diào)試的,而是關(guān)于瀏覽大項(xiàng)目的。如果你嘗試找到一些不是你自己寫的代碼中的錯(cuò)誤,快速知道“這個(gè)類型是什么”或者“這個(gè)函數(shù)是干嘛的”,可以節(jié)省很多時(shí)間,VS通過(guò)一個(gè)轉(zhuǎn)到定義命令方便了你。
11.命令窗口

第十一的技巧chaau已經(jīng)建議過(guò)了。確實(shí)可以節(jié)省很多時(shí)間,VS支持命令窗口,可以通過(guò),視圖-其他窗口-命令窗口來(lái)啟動(dòng)。一旦激活,你可以輸入不同的命令來(lái)自動(dòng)化調(diào)試。舉個(gè)例子。你可以通過(guò)如下命令 簡(jiǎn)單的模擬MFC COleDateTime 變量。
? dt.Format("%Y-%m-%d %H:%M:%S") 許可
本文包括源代碼和文件在CPOL下授權(quán)。
原文地址:10plus-powerful-debugging-tricks-with-Visual-Studi
著作權(quán)聲明:本文由http://leaver.me 翻譯,歡迎轉(zhuǎn)載分享。請(qǐng)尊重作者勞動(dòng),轉(zhuǎn)載時(shí)保留該聲明和作者博客鏈接,謝謝!
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注