第九章 例外处理与侦错.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 例外处理与侦错

* 9.5 偵錯實例 Step11:雖然找到錯誤,但仍會懷疑為何If條件會不成立,因此切換到監看式頁籤,然後輸入Distance以及Distance Mod 0.6兩個欄位。 * 9.5 偵錯實例 Step12:此時非常肯定錯誤出現在哪裡了,因為第22行必須是Distance Mod 0.6結果為0才成立,而由監看式可以看出,當時並非為0(有一點點誤差),故不成立,所以不是執行第23行而是執行第25行。 Step13:那麼問題出在哪裡呢?答案是第16行取CDbl(TextBox1.Text)時,Distance就已經發生了誤差。 問題是,這是.NET Framework提供的函式,我們並無法修改CDbl()函式。 另一個可能性則是Mod運算子有問題,而當您查閱msdn文件後,會發現在下列網址中,出現了相關的說明: /zh-tw/library/ae382yt8.aspx 9.5 偵錯實例 * 【浮點運算式不會比較為相等】 當您處理浮點數值 (Floating-Point Number) (字串資料型別 (Visual Basic) 和 Double 資料型別 (Visual Basic)) 時,請記得它們會當做二進位分數儲存。 這表示它們無法保留任何非二進位分數 (形式為 k / (2 ^ n),其中 k 和 n 為整數) 之數量的確切表示。 例如,0.5 (= 1/2) 和 0.3125 (= 5/16) 可以當做精確值保留,而 0.2 (= 1/5) 和 0.3 (= 3/10) 則只可為近似值。 因為這樣的不精確狀況,因此您在處理浮點數值時無法依賴確切結果。 特別是理論上相等的兩個值可能會有稍微不同的表示方式。 * 9.5 偵錯實例 Step14:因此我們應該採用一個技巧,想辦法讓Mod的兩個運算元都為整數,後方的0.6要成為整數比較容易,只要我們改變計算里程時的單位,由0.6公里改為600公尺即可。至於前方的Distance,則改為宣告Integer,但取得時,則改為Distance = CInt(CDbl(TextBox1.Text) * 1000) ,如此就可以將條件式改為Distance Mod 600。 Step15:我們將修改後的正確程式放在Button2_Click事件程序內,請讀者自行參閱。 Step16:現在我們將找出關於打折(Button3)的錯誤。 * 9.5 偵錯實例 Step17:請先清除第22行的中斷點,重新將中斷點設定在Button3_Click事件程序內的第32行。 Step18:重新啟動偵錯模式,先執行【偵錯/停止偵錯】指令。然後直接按下開始偵錯鈕 執行。 * 9.5 偵錯實例 Step19:於網頁中,輸入15,按下Button2,將取得正確的車資,然後按下Button3。 Step20:當執行到中斷點時會自動停止(第32行並未執行),此時在VWD視窗的區域變數窗格,找不到Cost變數可以觀察,因為它並不是區域變數(它是Page的欄位)。 * 9.5 偵錯實例 * 9.5 偵錯實例 Step21:此時有兩個辦法可以觀察Cost的變數值,一個方法是在監看式頁籤中,直接加入Cost欄位,或者將滑鼠游標移到Cost上方兩秒,也會顯示Cost目前的變數值。 【觀測Cost:方法1】 * 9.5 偵錯實例 【觀測Cost:方法2】 Step22:此時發現Cost並非如預期的200而是0,故Cost100會成立。如果您覺得很奇怪,就多試幾次Step19~21,每次輸入不同的值,您會發現,當執行到第32行時,Cost都是0,這又是為什麼呢? 答案就在範例4-13,因為當網頁進行PostBack時,上一次執行的Page執行個體已經消滅,而這次產生的是新的Page執行個體(物件實體),故之前Page執行個體的非靜態共享(Shared)欄位值當然也就消失了。 * 9.5 偵錯實例 Step23:雖然我們已經知道使用Cost欄位無法跨網頁保存資料,但要如何解決呢? 下一章的ViewState集合、SessionState集合都可解決此一問題。 而若不想要動用到下一章介紹的內容,則可以在Label1上動手腳。因為它仍保留了200在字串中,只要將之取出即可,因此我們將之改寫如下 Step24:我們將完整的修正放置於Button4_Click中(請自行參閱),測試結果如下。 Dim Index1, Index2 As Integer Index1 = Label1.Text.IndexOf(付, 0) 找出付的位置 Index2 = Label1.Text.IndexOf(元, 0)

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档