一眨眼的功夫,自己已經學習asp.net的有一年的功夫了。雖然稱不上什麼大神,但是也有一點知識的積累。就寫一片調試的入門文章給那些剛剛入門迷茫的童鞋們。希望你學習了我這篇文章能從迷茫的生活中找回編程的你。
對於程式員說永遠也逃不了調試這個門檻。曾經記得有次,那是我還大一,學習的是c在vc下面,同學寫了一段代碼,就是計算每月的幾日對應找出這年的第幾天。這個非常簡單的問題我想誰都會有思路,但是我朋友代碼寫出來了,編譯運行也都通過了,但偏偏就是得到的結果不對。我一看他的代碼也沒發現什麼問題,這個讓我情何以堪,於是我當即設定了斷點,運行了一下,一步一步的調試不到5分鐘吧問題解決了。問題的所在是他把這個月的天數多加進去了也就是在月這個for語句裡面多了一個等號。這個很小的問題是不容易發現的。舉這個例子是為了告訴讀者調試對於程式員來說多麼重要。我獨家之言:不會調試的人永遠不會編程。
好了現在我們言歸正傳。寫這邊文章的目的是為了告訴那些開發asp.net的程式員如何調試,如何找到問題的所在。
調試技巧1:
最正規的調試,那就是配合系統的斷點調試功能。首先我們建立一個頁面,為了方便,我直接把代碼寫在頁面的Page_load函數裡面。這裡我寫的例子還是為了說明某月某日是這一年的第幾天的問題。代碼如下:
protected void Page_Load(object sender, EventArgs e) { //這裡假設這一年是平年,每一個月的天數用枚舉法列出來就可以計算出某月某日是第幾天了 //先簡單的測試一下我們輸入的資料是否正確 對其所以的天數求和 Int32[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //利用Linq方法對其求和 months.Sum(); }
我們先把這個在解決方案裡面找到這個頁面然後右擊這個頁面把它設定為起始頁。
然後在寫代碼的最左邊左機一下設定一下斷點。
好了一切的工作都已經完成了,我們開始調試把。按下F5,
我們的程式已經進入了調試的頁面了如下:
在紅色的裡面多了一個黃色的箭頭,表示程式調試到這裡。這裡有一點需要注意,就是黃色這句還沒有執行。調試的命令這裡備忘一下F5表示的繼續的執行到下一個斷點,不管中間是什麼代碼,程式順序的執行到下一個斷點。如果沒有斷點,那就直接跳轉到運行狀態了。F10表示的單句的執行調試命令但是如果遇到調用函數之類就直接跳過函數調試,如果你覺得是函數有問題那就按F11;如果你的函數很有信心,那就按f10跳過函數的調試。個人覺得f10和f11唯一的區別就是是否調試函數。
我這裡調試按了一下f10跳轉到下一個調試驗。就說明這個跳水點以上的語句都執行了。
我們可以看一下months.Sum()的結果為多少了。右擊months這個變數,然後選擇快速查看
然後輸入你想要查看的資料,比如我想查看months的和。
看到了沒這裡顯示了value為365,就說明了我們資料是正確的。其實我們還有一種辦法。查看我們的資料
在底部找到一個watch1的對話方塊點擊它,
然後再他的Name中輸入Months.Sum(),在右邊就能顯示了我們需要的資料了。
正規的調試方法就寫到這裡。
調試技巧2:
巧用Response.Write方法。我想很多的從asp和php轉行過來的朋友都習慣用這種方法吧。比如我們要把要看一下求和的資料是多少,那就直接把結果Response.Write一下就可以了。
在用這個方法調試的時候記得在Response.Write後面加個return。原因很簡單,就是你希望把你執行到這個地方的語句統統的顯示出來。用處:這種調試的方法對於在伺服器上調試錯誤還是有協助的。因為伺服器上不需要安裝開發環境,我們只能把出錯前面的代碼顯示出來看一下哪裡有問題。(我以前也碰到過這樣的例子,我寫的動態菜單,就是根據許可權顯示不同的菜單選項。我這些寫好了整合到我同事那邊也ok,可是過了3天問題來了,同時說放到伺服器上出現問題了,但是自己也是調試不出來,幸好有個工作了10年的同事過來幫忙,用Response.Write語句把sql語句輸出來,發現了sql語句裡面的in是空的,沒有資料當然會報錯了,原來同事沒有吧我寫的資料指令碼在伺服器上運行,當時我也成長了)。
調試技巧3:
這種方法說白了不算是真正的調試方案,因為他的調試需要和資料庫中查看哪裡輸錯了。開發過項目的人都知道,一般的錯誤都是和資料庫互動的時候產生的,比較說,當我們插入的資料的長度超過了資料庫規定的長度,那就出錯了。好了那我該告訴你怎麼調試了。首先開啟SQL Server Profiler軟體,如果你的sql沒有內建的那就網站找一下 安裝一下。
然後選擇建立跟蹤。檔案菜單下面的表徵圖。然後輸入使用者名稱密碼登陸,在選擇事件對話方塊中把只要選擇RPC:completed、SQL:BatchCompleted、SQL:batchStarting這三個選項,然後選擇運行對話方塊。
這個時候我們在asp.net與資料庫操作試試看看發現了什麼~
剛剛執行的語句被捕獲到了,哈哈
是不是很神奇,這裡需要注意幾點,無論是資料庫自己的操作或者是asp.net與資料庫互動的操作這個SQL Server Profiler都會捕獲到。其實如果你長久的開著這個頁面會有很多的資料,那調試的時候,不希望在這麼多條資料找東西吧,先清空一下跟蹤的記錄,在運行代碼就可以顯示運行代碼的語句了。
當然了這個SQL Server Profiler其實真正的用處不是這樣的,他是sql 用來調優用的,我這裡只是大材小用,希望微軟不要找我哈哈。
就寫到這裡了。分享是一種快樂,但是分享者希望得到的更多地是讀者的支援!