NET軟件調(diào)試.ppt_第1頁(yè)
NET軟件調(diào)試.ppt_第2頁(yè)
NET軟件調(diào)試.ppt_第3頁(yè)
NET軟件調(diào)試.ppt_第4頁(yè)
NET軟件調(diào)試.ppt_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.NET軟件調(diào)試,主要內(nèi)容 調(diào)試與測(cè)試 掌握基本的調(diào)試能力 Visual Studio .NET 2005基本調(diào)試技巧 斷言與跟蹤 .NET中的Diagnostics類的使用,.NET軟件調(diào)試,調(diào)試與測(cè)試,調(diào)試是確保軟件正常工作的基本方法 調(diào)試是診斷問(wèn)題的重要手段,是一個(gè)bug被精確定位、修正后重新驗(yàn)證的主要方法 調(diào)試的基本手段是跟蹤,通過(guò)跟蹤代碼在運(yùn)行時(shí)的狀況可以發(fā)現(xiàn)程序中絕大多數(shù)的問(wèn)題 經(jīng)驗(yàn):程序調(diào)試是開發(fā)人員必備的基本素質(zhì),掌握好調(diào)試技術(shù),是程序開發(fā)的關(guān)鍵技術(shù),在實(shí)際的開發(fā)工作中,絕大多數(shù)的bug是通過(guò)程序調(diào)試來(lái)找到問(wèn)題并解決的,掌握基本的調(diào)試能力,測(cè)試人員為什么要掌握基本的調(diào)試能力 測(cè)

2、試的目的是除了發(fā)現(xiàn)問(wèn)題,還要給開發(fā)人員提供更詳細(xì)的出錯(cuò)信息 詳細(xì)的出錯(cuò)信息不但是要提交出錯(cuò)的現(xiàn)象,更重要的是還能提供錯(cuò)誤代碼的上下文及相關(guān)信息 經(jīng)驗(yàn):無(wú)論是白盒測(cè)試,還是黑盒測(cè)試,都應(yīng)該掌握基本的調(diào)試技巧,Visual Studio.NET2005基本調(diào)試技巧,斷點(diǎn)設(shè)置 F9 是切換斷點(diǎn)的功能鍵,再次按F9為取消斷點(diǎn)操作 斷點(diǎn)設(shè)置是為了在程序運(yùn)行的過(guò)程中暫停,以便查看程序當(dāng)前的狀態(tài) 設(shè)置斷點(diǎn)后,以調(diào)試運(yùn)行的方式執(zhí)行程序,則在碰到斷點(diǎn)的代碼將自動(dòng)暫停,Visual Studio.NET2005基本調(diào)試技巧,Visual Studio.NET2005基本調(diào)試技巧,調(diào)試輸出 設(shè)置好斷點(diǎn)后,按F5快捷

3、鍵將啟動(dòng)調(diào)試,以調(diào)試方式運(yùn)行代碼,在Visual Studio.NET 2005的“輸出窗口”,會(huì)顯示程序加載各種DLL的情況,Visual Studio.NET2005基本調(diào)試技巧,在輸出窗口可以看到程序啟動(dòng)時(shí)需要加載的組件信息,包括組件名稱及其所在磁盤的位置,Visual Studio.NET2005基本調(diào)試技巧,變量監(jiān)視 運(yùn)行的程序在碰到斷點(diǎn)的時(shí)候?qū)⒆詣?dòng)暫停執(zhí)行,這時(shí)可在“局部變量”或者“即時(shí)”窗口看到當(dāng)前函數(shù)的所有局部變量的值 變量名稱 變量當(dāng)前值 變量的類型,Visual Studio.NET2005基本調(diào)試技巧,局部變量窗口:顯示所有局部變量當(dāng)前狀態(tài) 即時(shí)窗口:可以指定顯示的變量當(dāng)

4、前狀態(tài),Visual Studio.NET2005基本調(diào)試技巧,調(diào)用堆棧 在“調(diào)用堆?!贝翱冢梢钥吹皆跀帱c(diǎn)之前,程序中函數(shù)執(zhí)行的順序 注意窗口中的函數(shù)顯示順序,Visual Studio.NET2005基本調(diào)試技巧,函數(shù)的執(zhí)行順序是以倒序的方式排列,最先執(zhí)行的函數(shù)排在最后一行,而當(dāng)前正在執(zhí)行的函數(shù)在第一行 注意:1. 堆棧的對(duì)于我們調(diào)試程序非常有用,特別是在程序出錯(cuò)時(shí),跟蹤堆??梢哉业匠绦虺鲥e(cuò)的具體位置 2. 有很多測(cè)試工具,它的作用就是在程序出錯(cuò)時(shí)打印當(dāng)前出錯(cuò)的代碼堆棧,根據(jù)堆??梢院芸彀l(fā)現(xiàn)問(wèn)題,Visual Studio.NET2005基本調(diào)試技巧,逐過(guò)程調(diào)試 在斷點(diǎn)處,如果要繼續(xù)執(zhí)行程

5、序,按快捷鍵F5,程序會(huì)直接運(yùn)行到下一個(gè)斷點(diǎn)的代碼行處 在斷點(diǎn)處按F10快捷鍵可以一行一行的執(zhí)行代碼,Visual Studio.NET2005基本調(diào)試技巧,逐語(yǔ)句調(diào)試 逐過(guò)程調(diào)試并不能一步步執(zhí)行每條語(yǔ)句,當(dāng)代碼中有函數(shù)調(diào)用時(shí),會(huì)跳過(guò)函數(shù)體 快捷鍵F11可以進(jìn)入到函數(shù)體內(nèi)進(jìn)行調(diào)試,Visual Studio.NET2005基本調(diào)試技巧,WriteLine方法的使用 為了在程序運(yùn)行過(guò)程中能清楚掌握當(dāng)前的運(yùn)行情況,我們加入一些信息的輸出語(yǔ)句(程序運(yùn)行日志) private int max(int val1, int val2) Console.WriteLine(val1的值= + val1);

6、Console.WriteLine(val2的值= + val2); int maxval = 0; if (val1 val2) maxval = val1; else maxval = val2; Console.WriteLine(返回的最大值是: + maxval); return maxval; ,Visual Studio.NET2005基本調(diào)試技巧,當(dāng)一個(gè)程序運(yùn)行時(shí),可以通過(guò)后臺(tái)輸出窗口監(jiān)控當(dāng)前的運(yùn)行情況,一旦程序運(yùn)行異常,根據(jù)輸出窗口打出的日志,可以很快發(fā)現(xiàn)問(wèn)題 特別是針對(duì)沒有用戶界面的程序,日志能起到很大的調(diào)試作用,Visual Studio.NET2005基本調(diào)試技巧,提醒

7、:我們?cè)谧鲰?xiàng)目開發(fā)的時(shí)候,往往都會(huì)先開發(fā)一個(gè)功能很全的日志模塊,這個(gè)日志模塊能嵌入到項(xiàng)目的所有代碼中,利用這個(gè)日志模塊來(lái)顯示整個(gè)程序進(jìn)行的流程信息 日志顯示在項(xiàng)目開發(fā)中很重要,是我們監(jiān)控程序正常運(yùn)行的重要依據(jù),斷言與跟蹤,Debug類的使用 斷言是測(cè)試一個(gè)條件,如果條件為真(true),則通過(guò),如果條件為假(false),則彈出錯(cuò)誤對(duì)話框,在對(duì)話框中可以看到出錯(cuò)的代碼行 用Debug類中的Assert方法實(shí)現(xiàn)斷言 private void button1_Click(object sender, EventArgs e) int a = 0, b = 0; Debug.Assert(textB

8、ox1.Text.Length 0, “輸入值不能為空); a = Int32.Parse(this.textBox1.Text); b = Int32.Parse(this.textBox2.Text); int val = max(a, b); ,斷言與跟蹤,Assert方法只是在Debug編譯版本中有效,斷言與跟蹤,在使用斷言時(shí)注意的問(wèn)題 因?yàn)閿嘌灾辉贒ebug版本里才執(zhí)行,在Release版本中是不會(huì)執(zhí)行這條語(yǔ)句的,所以斷言語(yǔ)句里不能有改變局部或者全局變量的值,否則程序在Release版本中運(yùn)行時(shí)會(huì)出現(xiàn)問(wèn)題。 Debug.Assert(Func(變量1) 0, “出錯(cuò));,斷言與跟蹤,

9、Trace類的使用 Trace類和Debug類類似,使用方法也基本相同 區(qū)別 Debug類的斷言代碼不會(huì)編譯到Release版本中去 Rrace類的斷言代碼會(huì)編譯到Release版本中去 缺點(diǎn)是會(huì)增加Release版本的程序大小,降低程序運(yùn)行效率 Trace.Assert(textBox1.Text.Length 0, “輸入值不能為空);,.NET中的Diagnostics類的使用,System.Diagnostics 命名空間 提供用于調(diào)試應(yīng)用程序和跟蹤代碼執(zhí)行情況的類(Debug、Trace) 提供特定的類,使我們能夠與系統(tǒng)進(jìn)程、事件日志和性能計(jì)數(shù)器進(jìn)行交互,代表性的類: EventLo

10、g類 Process類 PerformanceCounter類 用這些類我們可以使問(wèn)題的跟蹤和定位更準(zhǔn)確和方便,.NET中的Diagnostics類的使用,EventLog類 通過(guò)它,我們可以訪問(wèn)Windows的事件日志 寫入事件日志 讀取事件日志項(xiàng) 創(chuàng)建和刪除事件日志,.NET中的Diagnostics類的使用,示例:用EventLog類往事件日志中寫入信息 if (!EventLog.SourceExists(MySource) EventLog.CreateEventSource(MySource, MyNewLog); EventLog myLog = new EventLog();

11、myLog.Source = MySource; myLog.WriteEntry(Writing to event log.);,.NET中的Diagnostics類的使用,Process類 監(jiān)視整個(gè)網(wǎng)絡(luò)的系統(tǒng)進(jìn)程以及啟動(dòng)和停止本地系統(tǒng)進(jìn)程 查看有關(guān)當(dāng)前可訪問(wèn)處理器的進(jìn)程的信息 獲取有關(guān)進(jìn)程線程和模塊的詳細(xì)信息,.NET中的Diagnostics類的使用,實(shí)例1:用Process類啟動(dòng)一個(gè)畫筆程序 Process pro = new Process(); pro.StartInfo.FileName=C:windowssystem32mspaint.exe; pro.Start(); Mes

12、sageBox.Show(pro.StartTime.ToString();,.NET中的Diagnostics類的使用,實(shí)例2:用Process類查看指定進(jìn)程加載的模塊信息 Process pro = new Process(); pro.StartInfo.FileName=C:windowssystem32mspaint.exe; pro.Start(); for (int i = 0; i pro.Modules.Count; i+) Console.WriteLine(pro.Modulesi.ToString(); ,.NET中的Diagnostics類的使用,運(yùn)行結(jié)果:,畫圖程序

13、運(yùn)行后加載的模塊,.NET中的Diagnostics類的使用,實(shí)例3:用Process類查看指定進(jìn)程加載模塊所需的內(nèi)存信息 Process pro = new Process(); pro.StartInfo.FileName=C:windowssystem32mspaint.exe; pro.Start(); for (int i = 0; i pro.Modules.Count; i+) Console.WriteLine(pro.Modulesi.ToString(); Console.WriteLine(pro.Modulesi.ModuleMemorySize.ToString();

14、 ,.NET中的Diagnostics類的使用,運(yùn)行結(jié)果:,畫圖程序運(yùn)行后加載的模塊內(nèi)存信息,.NET中的Diagnostics類的使用,利用Process類查看進(jìn)程內(nèi)的線程信息 可以查看線程的ID、線程啟動(dòng)的時(shí)間、線程的狀態(tài)、線程使用的處理器時(shí)間總量,.NET中的Diagnostics類的使用,實(shí)例4:用Process類查看畫圖程序相關(guān)線程的當(dāng)前狀態(tài) for (int i = 0; i pro.Threads.Count; i+) /獲取進(jìn)程ID string ID = pro.Threadsi.Id.ToString(); /獲取進(jìn)程狀態(tài) string ThreadState = pro.

15、Threadsi.ThreadState.ToString(); Console.WriteLine(“線程”+ID+“當(dāng)前狀態(tài):”+ThreadState); ,.NET中的Diagnostics類的使用,運(yùn)行結(jié)果:,.NET中的Diagnostics類的使用,實(shí)例5:用Process類監(jiān)視進(jìn)程的性能問(wèn)題 while (pro.HasExited = false) Console.WriteLine(占用物理內(nèi)存:“ + pro.WorkingSet.ToString(); Console.WriteLine(“占用虛擬內(nèi)存: “ + pro.VirtualMemorySize.ToString(); Console.WriteLine(占用處理器的時(shí)間:“ + pro.TotalProcessorTime.ToString(); ,.NET中的Diagnostics類的使用,查看某個(gè)進(jìn)程使用物理內(nèi)存、虛擬內(nèi)存、以及占用處理器時(shí)間等信息,運(yùn)行結(jié)果:,.NET中的Diagnostics類的使用,PerformanceCounter類 Diagnostics中專門提供的類來(lái)監(jiān)視

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論