本文總結了十個調試技巧,當你使用VS的時候可以節省你很多時間。
1.懸停鼠標查看表達式
調試有時候很有挑戰性,當你步入一個函數想看看哪塊出錯的時候,查看調用棧來想想值是從哪來的。另一些情況下,則需要添加一些監視表達式,或者查看局部變量列表,這通常還是花費一些時間的,但是。如果你把你鼠標指向你感興趣的一個變量。你會發現事情簡單多了。而且,類和結構體可以通過單擊展開。這樣。你就可以方便快捷的找到你想查看的變量了。
2實時改變值
調試器不僅僅是一個分析程序崩潰或是異常結果的工具了,許多bug都可以通過步入新寫的函數,檢查函數是否如期望的那樣運行來預防。有時候你可能會好奇“如果條件為真函數會正確運行嗎”大多數情況下,根本不需要改變代碼重啟挑起,僅僅把鼠標懸停到一個變量上,雙擊值然后輸入一個新值就可以了。。
3.設置下一條語句
一個典型的調試情況就是通過單步跟蹤分析為什么一個函數調用失敗了。當你發現一個函數調用的另一個函數返回錯誤的時候你會怎么做?重啟調試?有更好的方法。拖動這個黃色的語句標識到你想下一步執行的語句前就可以了。比如你剛才失敗的那塊,然后步入。簡單,不是嗎?
4.編輯然后繼續
調試一個復雜的程序,或是一個插件的時候,在一個被調用很多次的函數處發現一個錯誤。但是不想浪費時間停下來,重新編譯然后重新調試。沒問題,僅僅在該處改正代碼然后繼續單步就可以。VS會修正程序然后繼續調試不需要重啟
注意,編輯然后繼續有大量的已知限制,首先,64位代碼是不行的。如果他如果為你的C#程序工作。就去工程設置的生成選項,然后目標平台為x86.不要擔心。發布版的目標平台和調試的時候是分開的。可以被設置為任何平台。。
第二.編輯然后繼續改變在一個方法里應該是局部的。。如果你改變了方法簽名,添加一些新方法或是類。你就不得不重啟程序了。或者撤銷改變來繼續。改變方法也包含lambda表達式隱式修改的自動生成的代理類,因此也不能繼續。
5.方便的監視窗口
大概現代的調試器都有一個監視窗口,無論如何。VS允許你簡單的添加或移除變量。單擊空行,輸入你的表達式按下回車,或者是在不需要的表達式上按下Delete鍵就可以刪除了。
而且。從監視窗口你不僅僅可以看到“正常”的變量。你可以輸入$handles 來追蹤你的程序打開了多少句柄(可以方便的修復內存泄漏),輸入$err 可以看到上一個函數的錯誤碼,然后使用工具-錯誤信息可以看到更詳細的描述,或者輸入@eax(64位是@rax)來查看包含函數返回值的寄存器。
6.帶注釋的反匯編
使用交互式的反匯編模式可以使得優化程序的關鍵部分變得很容易,VS給出對應你代碼每一行的匯編指令,並且運行單步運行。同時,可以在任何位置設置斷點。而且,表達式的查看和修改也像在C++代碼里一樣
7.帶有棧的線程窗口
調試多線程的程序是痛苦的。。或者也可以是很有趣的。取決於你的調試器。VS2010真正優美的特性是線程窗口的棧視圖,通過窗口的調用棧你可以方便的總覽線程。
8.條件斷點
如果你嘗試通過斷點再現一個罕見的事件,該情況引發了一些嚴重的錯誤。你可以添加條件斷點。定義一個斷點的條件,然后如果條件不成立,VS會忽略該斷點
9.內存窗口
有些bug由不正確的結構體定義引起,忽略的對齊屬性等等。查看內存中的內容可以定位然后修復bug。VS提供了一個放百年的內存窗口,可以把值以8/16/32/64位的形式展示。還有浮點值。也允許實時改變他們。就像在文本編輯器里一樣。
10.轉到定義
這個特性不是直接關於調試的,而是關於瀏覽大項目的。如果你嘗試找到一些不是你自己寫的代碼中的錯誤,快速知道“這個類型是什么”或者“這個函數是干嘛的”,可以節省很多時間,VS通過一個轉到定義命令方便了你。
11.命令窗口
第十一的技巧chaau已經建議過了。確實可以節省很多時間,VS支持命令窗口,可以通過,視圖-其他窗口-命令窗口來啟動。一旦激活,你可以輸入不同的命令來自動化調試。舉個例子。你可以通過如下命令 簡單的模擬MFC COleDateTime 變量。