已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
掌握VS2010調試 - 入門指南debuggingvisual studio 2010VS2010調試目錄(?)-1. 導言2. 如何啟動調試3. 斷點Breakpoints1. 1 使用斷點進行調試1. 11 逐過程Step Over2. 12 逐語句Step Into3. 13 跳出Step Out4. 14 繼續(xù)Continue5. 15 設置下一語句Set Next Statement6. 16 顯示下一語句Show Next Statement Ctrl2. 2 斷點標簽Labeling in Break Point3. 3 條件斷點Conditional Breakpoint4. 4 導入導出斷點Import Export Breakpoint5. 5 斷點命中計數(shù)Breakpoint Hit Count6. 6 Breakpoint When Hit7. 7 斷點篩選器Breakpoint Filter4. 數(shù)據(jù)便簽Data Tip1. 1 Pin Inspect Value During Debugging2. 2 Drag-Drop Pin Data Tip3. 3 Adding Comments4. 4 Last Session Debugging Value5. 5 Import Export Data Tips6. 6 Change Value Using Data Tips7. 7 Clear Data Tips5. 監(jiān)視窗口Watch Windows1. 1 局部變量Locals2. 2 自動窗口Autos3. 3 監(jiān)視Watch1. 有4個可同時使用的監(jiān)視窗口 圖多個監(jiān)視窗口2. 31 Creating Object ID4. 46. 即時窗口Immediate Window7. 調用堆棧Call Stack8. 調試多線程程序Debugging Multithreaded Program1. 1 Exploring Threads Window2. 2 Flag Just My Code3. 3 Break Point Filter - Multithread Debugging9. 調試并行程序Debugging Parallel Program1. 1 Parallel Task and Parallel Stacks10. Debugging with IntelliTrace1. 1 Overview2. 2 Mapping with IntelliTrace3. 3 Filter IntelliTrace Data11. 調試常用快捷鍵Useful Shortcut Keys For VS Debugging12. 深入學習Further Study13. 總結Summary1 導言在軟件開發(fā)周期中,測試和修正缺陷(defect,defect與bug的區(qū)別:Bug是缺陷的一種表現(xiàn)形式,而一個缺陷是可以引起多種Bug的)的時間遠多于寫代碼的時間。通常,debug是指發(fā)現(xiàn)缺陷并改正的過程。修正缺陷緊隨debug之后,或者說二者是相關的。如果代碼中存在缺陷,我們首先要識別造成缺陷的根本原因(root cause),這個過程就稱作調試(debugging)。找到根本原因后,就可以修正缺陷。那么如何調試代碼呢?Visual Studio提供了很多用于調試的工具。有時調試需要花費大量時間去識別root cause。VS提供了許多輔助調試的便捷的工具。調試器(Debugger)包含錯誤列表、添加斷點、可視化的程序流程、控制執(zhí)行流程、Data Tips、監(jiān)視窗口(watch windows)、多線程調試、線程窗口、并行調試概覽以及IntelliTrace調試概覽。我希望本文能夠對調試功能的使用者有所裨益。請注意,本文使用VS2010。某些功能在舊版本中也是一致的,但是VS2010新增了許多features(Labeling breakpoint, Pinned DataTip, Multithreaded Debugging, Parallel debugging and IntelliTrace)。2 如何啟動調試?可以通過VS的調試(Debug)菜單啟動調試。點擊調試菜單下的“啟動調試”或者按F5鍵啟動。如果你已經在代碼中加入了斷點,那么執(zhí)行會自動開始。圖 啟動調試(Start Debugging)“附加到進程(Attach to Process)”是另一種啟動調試的方法。Attach Process會為應用程序啟動一個調試會話??赡芪覀兏煜SP.NET Web應用的Attach Process調試。我發(fā)了另外兩篇相關的帖子。如下: Debug Your ASP.NET Application that Hosted on IIS Remote IIS Debugging: Debug your ASP.NET Application which is hosted on Remote IIS Server通常我們通過在可能存在問題代碼處加斷點來啟動調試。因此,我們從斷點開始講起。3 斷點(Breakpoints)斷點用于通知調試器何時何處暫停程序的執(zhí)行。通過點擊左邊欄或者按F9鍵在當前行添加斷點。在加斷點之前,你需要知道你的代碼將會出現(xiàn)什么錯誤,在什么地方停止執(zhí)行。當調試器執(zhí)行到斷點處時,你可以使用其他的調試工具核對代碼何處出現(xiàn)錯誤。圖 設置斷點(Set Breakpoint)3.1 使用斷點進行調試你已經在你想要暫停執(zhí)行的地方設置了斷點?,F(xiàn)在按F5鍵啟動調試,當程序執(zhí)行到斷點處時,自動暫停執(zhí)行。此時你有多種方式來檢查代碼。命中斷點(hit the breakpoint)后,加斷點的行變?yōu)辄S色,意指下一步將執(zhí)行此行。在中斷模式下,你有多條可使用的命令,使用相應命令進行進一步的調試。圖 斷點工具條(Breakpoint Toolbar)3.1.1 逐過程(Step Over)調試器執(zhí)行到斷點后,你可能需要一條一條的執(zhí)行代碼?!盨tep Over“F10命令用于一條一條的執(zhí)行代碼。這將執(zhí)行當前高亮的行,然后暫停。如果在一條方法調用語句高亮時按F10,執(zhí)行會停在調用語句的下一條語句上。Step Over會一次整個方法。圖: 逐過程(Step Over - F10)3.1.2 逐語句(Step Into)它與Step Over相似。唯一的不同是,如果當前高亮語句是方法調用,調試器會進入方法內部。快捷鍵是”F11“。圖: 逐語句(Step Into - F11)3.1.3 跳出(Step Out)當你在一個方法內部調試時會用到它。如果你在當前方法內按Shift - F11,調試器會完成此方法的執(zhí)行,之后在調用此方法的語句的下一條語句處暫停。3.1.4 繼續(xù)(Continue)它像是重新執(zhí)行你的程序。它會繼續(xù)程序的執(zhí)行直到遇到下一個斷點??旖萱I是”F5“。3.1.5 設置下一語句(Set Next Statement)這是一個非常有趣的特性。設置下一語句允許你在調試的時候改變程序的執(zhí)行路徑。如果你的程序在某一行處暫停而且你想改變執(zhí)行路徑,跳到指定行,在這一行上右擊,在右擊菜單中選擇”設置下一語句“。這樣程序就會轉到哪一行執(zhí)行而不執(zhí)行先前的代碼。這在如下情況中非常有用:當你發(fā)現(xiàn)代碼中某些行可能會導致程序的中斷(break)而你不想讓程序在那個時候中斷??旖萱I是Ctrl + Shift + F10。圖: 設置下一語句(Set Next Statement)3.1.6 顯示下一語句(Show Next Statement Ctrl+*)這一行用黃色箭頭標記。這行是程序繼續(xù)執(zhí)行時下一條將執(zhí)行的語句。3.2 斷點標簽(Labeling in Break Point)這是VS2010提供的新特征(feature)。用于更好的管理斷點。它使得我們能夠更好的分組和過濾斷點。這像是對斷點的歸類。如果我們添加了與某一功能相關的不同類型的斷點,我們可以根據(jù)需要使能(enable)、取消(disable)、過濾(filter)這些斷點。例如,假設我們要調試一下代碼塊。csharpview plaincopy1. classProgram2. 3. staticvoidMain(stringargs)4. 5. stringstrNames=Name1,Name2,Name3,Name4,Name5,Name6;6. 7. foreach(stringnameinstrNames)8. 9. Console.WriteLine(name);/BreakPoint10. 11. inttemp=4;12. for(inti=1;i6)15. temp=5;16. 17. 18. 19. publicstaticvoidMethod1()20. 21. Console.WriteLine(BreakPointinMethod1);/BreakPoint22. 23. 24. publicstaticvoidMethod2()25. 26. Console.WriteLine(BreakPointinMethod2);/BreakPoint27. Console.WriteLine(BreakPointinMethod2);/BreakPoint28. 29. 30. publicstaticvoidMethod3()31. 32. Console.WriteLine(BreakPointinMethod3);/Breakpoint33. 34. 執(zhí)行程序將停在第一個斷點處。下圖給出了斷點列表。圖: 斷點列表上圖中Labels列都為空。下面介紹如何給斷點設置標簽(label)以及如何使用標簽。只需在特定代碼行的斷點符號上右擊()或者在斷點窗口中設置()即可對任何斷點設置標簽。圖: 設置斷點標簽(Setting Breakpoint Label)右擊斷點,點擊編輯標簽(Edit Labels),即可對任意斷點添加標簽。對于示例代碼,我為所有斷點的標簽起了易于理解的名字。圖: 添加斷點標簽(Adding Breakpoint Label)這些標簽如何輔助我們調試呢?現(xiàn)在,所有斷點都是使能的(enabled)。如果你不想調試method2,一般情況下你必須去對應的方法中一個一個的取消斷點,但這里你可以通過標簽名過濾或者搜索它們,然后選中它們以方便的取消它們。圖: 使用標簽過濾斷點(Filter Breakpoint Using Labels)斷點標簽到此介紹完畢。我舉的例子非常簡單,但是斷點標簽在你調試大量代碼,多個工程等情況下非常有用。3.3 條件斷點(Conditional Breakpoint)假設你在多次迭代(循環(huán))處理數(shù)據(jù)而你只想調試其中某幾次迭代。這意味著你想根據(jù)某些特定條件暫停你的程序。Visual Studio斷點允許你設置條件斷點。當且僅當條件滿足時,調試器才會停住。首先,你需要在你想暫停執(zhí)行處設置斷點。然后右擊紅色的斷點圖標。右鍵菜單中點擊”條件“。圖: 設置斷點條件(Set Breakpoint Condition)點擊右鍵菜單中的”條件“后,會彈出下面的對話框設置斷點的條件。圖: 斷點條件設置假設你要調試下面的代碼塊:csharpview plaincopy1. classProgram2. 3. staticvoidMain(stringargs)4. 5. stringstrNames=Name1,Name2,Name3,Name4,Name5,Name6;6. 7. foreach(stringnameinstrNames)8. 9. Console.WriteLine(name);/Breakpointishere10. 11. 12. 你在Console.WriteLine()語句處設置了斷點。當執(zhí)行程序時,每次for-each循環(huán)都會停住。如果你想讓代碼只在name=Name3時停住,該怎么辦呢?非常簡單,你只需使用條件name.Equals(Name3)。圖: 設置斷點條件查看斷點符號。它應該看上去像是一個加(+)號在斷點符號內部,這表示該斷點是條件斷點。圖: 條件斷點符號(Conditional Breakpoint Symbol)設置斷點的條件之后,在調試程序,調試器只會在滿足給定條件時才停住。圖: 條件斷點命中(Conditional Breakpoint hit)條件輸入框的自動補全(intellisense):上面給出的斷點條件非常簡單,可以非常容易的寫到條件文本框中。有時你可能需要定義很大很復雜的條件。不必擔心,VS為條件文本輸入框也提供了自動補全功能。因此,在條件框中輸入就像是在編輯器中一樣方便。如下圖。圖: 條件文本框的自動補全(intellisense in condition textbox)我?guī)缀踔v解了條件斷點的所有內容。除了下面這點。在條件窗口中有兩個選項:1. Is True2. Has Changed我們已經看到”Is True“選項的用途了?!盚as Changed“用在當你想在某些值變?yōu)槟承┨囟ㄖ档臅r候停住。3.4 導入/導出斷點(Import / Export Breakpoint)3.5 斷點命中計數(shù)(Breakpoint Hit Count)3.6 Breakpoint When Hit3.7 斷點篩選器(Breakpoint Filter)你可以限制斷點只對特定進程或線程有效。這在進行多線程程序的調試時非常有用。右擊斷點選”篩選器“即可打開篩選器窗口。圖: 斷點篩選器(Breakpoint Filter)在篩選規(guī)則中,你可以設置進程名,進程Id,機器名,線程ID等。我會在多線程調試小節(jié)中詳述其用法。4 數(shù)據(jù)便簽(Data Tip)數(shù)據(jù)便簽是應用程序調試期間用于查看對象和變量的一種高級便簽消息。當調試器執(zhí)行到斷點時,將鼠標移到對象或者變量上方時,你會看到它們的當前值。你甚至可以看到一些復雜對象(如dataset,datatable等等)的細節(jié)。數(shù)據(jù)便簽左上角有一個“+”號用于展開它的子對象或者值。圖: 調試時的數(shù)據(jù)便簽(DataTips During Debugging)幾個月前,我發(fā)過一篇關于VS 2010 DataTip Debugging Tips的文章。下面是一些在調試時有用的特性。4.1 Pin Inspect Value During Debugging4.2 Drag-Drop Pin Data Tip4.3 Adding Comments4.4 Last Session Debugging Value4.5 Import Export Data Tips4.6 Change Value Using Data Tips4.7 Clear Data Tips5 監(jiān)視窗口(Watch Windows)5.1 局部變量(Locals)列出當前方法中的所有變量。當調試器停在某特定斷點并打開Autos窗口時,將展示當前范圍中與此值相關的變量。圖:Local Variables5.2 自動窗口(Autos)這些變量由VS調試器在調試的時候自動檢測。VS檢測與當前語句相關的對象或變量,基于此列出Autos變量。Autos Variable的快捷鍵是Ctrl + D + A。圖:Autos - Ctrl + D, A5.3 監(jiān)視(Watch)Watch窗口用于添加變量。你可以添加任意多個變量。添加方法是,右擊變量并選擇“Add to Watch”。圖:Watch - Ctrl + D, W也可以使用拖放(Drag and Drop)將變量添加到監(jiān)視窗口中。從監(jiān)視窗口中刪除變量的方法是,右擊變量并選擇“Delete Watch”。通過調試窗口,也可以在運行時編輯這些變量值。有4個可同時使用的監(jiān)視窗口。圖:多個監(jiān)視窗口若果變量中含有對象實例,左邊會有一個“+”號用于查看對象的屬性和成員。圖:展開監(jiān)視變量5.3.1 Creating Object IDVisual Studio調試器提供另外一個強大的功能,支持我們?yōu)閷ο蟮娜魏我粋€特定實例創(chuàng)建一個對象ID(object ID)。這可以用于在任何時間監(jiān)控任意對象,甚至是該對象位于范圍(scope)之外。在監(jiān)視窗口(watch window)右擊特定對象變量,再單擊“Make Object ID”即可創(chuàng)建Object ID。圖: 創(chuàng)建Object ID在對特定對象變量創(chuàng)建Object ID之后,Visual Studio會給這個對象添加一個數(shù)碼和“#”號,用來表示。圖:添加Object ID后5.46 即時窗口(Immediate Window)即時窗口是開發(fā)人員常用的功能。它可以在不改變當前調試步驟的情況下修改變量值或者執(zhí)行一些語句。我們可以通過菜單調試 窗口 即時(Debug Window Immediate Window)打開即時窗口。即時窗口支持一組命令,可在調試的任何時刻執(zhí)行。它也支持Intellisense。在調試期間,我們可以在即時窗口中執(zhí)行任何命令或者代碼語句。圖:基本即時窗口(Basic Immediate Window)這是對所有開發(fā)人員來說最為常用的特性,因此我就不一一介紹即時窗口的每一條命令了。7 調用堆棧(Call Stack)8 調試多線程程序(Debugging Multithreaded Program)8.1 Exploring Threads Window8.2 Flag Just My Code8.3 Break Point Filter - Multithread Debugging9 調試并行程序(Debugging Parallel Program)9.1 Parallel Task and Parallel Stacks10 Debugging with IntelliTrace10.1 Overview10.2 Mapping with IntelliTrace10.3 Filter IntelliTrace Data11 調試常用快捷鍵(Useful Shortcut Keys For VS Debugging)Shortcut KeysDescriptionsCtrl-Alt-V, ADisplays the Auto windowCtrl-Alt-BDisplays the Breakpoints dialogCtrl-Alt-CDisplays the Call StackCtrl-Shift-F9Clears all of the breakpoints in the projectCtrl-F9Enables or disables the breakpoint on the current line of codeCtrl-Alt-EDisplays the Exceptions dialogCtrl-Alt-IDisplays the Immediate windowCtrl-Alt-V, LDisplays the Locals windowCtrl-Alt-QDisplays the Quick Watch dialogCtrl-Shift-F5Terminates the current debugging session, rebuilds if necessary, and starts a new debugging session.Ctrl-F10Starts or resumes execution of your code and then halts execution when it reaches the selected statement.Ctrl-Shift-F10Sets the execution point to the line of code you chooseAlt-NUM *Highlights the next statementF5If not currently debugging, this runs the startup project or projects and attaches the debugger.Ctrl-F5Runs the code without invoking the debuggerF11Step IntoShift-F11Executes the remaining lines out from procedureF10Executes the next line of code but does not step into any function callsShift-F5Available in break and run modes, this terminates
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年傳染病防治獸藥項目規(guī)劃申請報告
- 2025年建筑安裝服務項目提案報告
- 2024-2025學年硯山縣數(shù)學三上期末質量檢測試題含解析
- 2025年果蔬罐頭加工項目提案報告
- 2025年低碳小鎮(zhèn)項目規(guī)劃申請報告模板
- 專家邀請函范文錦集六篇
- 質量承諾書模板集合8篇
- 上海裝修施工合同
- 學生軍訓心得體會(集合15篇)
- 電子商務實習自我鑒定9篇
- 2023年上海市閔行區(qū)中心醫(yī)院住院醫(yī)師規(guī)范化培訓招生(口腔科)考試參考題庫+答案
- 單肺通氣中的麻醉管理
- 建筑施工安全檢查標準jgj59-2023
- 2023-2024學年江蘇省高郵市小學數(shù)學六年級上冊期末通關考試題
- GB/T 7631.5-1989潤滑劑和有關產品(L類)的分類第5部分:M組(金屬加工)
- GB/T 40428-2021電動汽車傳導充電電磁兼容性要求和試驗方法
- 中國人民大學組織行為管理學
- 七年級下冊道德與法治復習資料
- 奧齒泰-工具盒使用精講講解學習課件
- DB32T 4353-2022 房屋建筑和市政基礎設施工程檔案資料管理規(guī)程
- 拆除工程原始記錄
評論
0/150
提交評論