簡介
程式設計師最重要的工作是什麼呢,除錯
除錯過程中難免會遇到各種各樣的奇葩問題,但是隻要輸出日誌,打斷點就基本上都可以定位並找到問題的真正所在
除錯是一個非常有趣的工作,你可以把它當成是闖關,第一次沒找到,就來第二次,一次又一次,便會發現其中的樂趣
今天跟大家聊的這個問題呢,主要是在除錯過程中莫名其妙的發生的問題,他阻礙了我們除錯的工作,讓我們走進這個問題,一起來學習一下如何解決它
問題重現
我們建立一個測試的方法如下
1 [TestMethod()] 2 public void GetCustomDirectoryTest1() 3 { 4 var result = SysHelper.GetCustomDirectory("Path",";"); 5 foreach(var item in result) 6 { 7 if (!string.IsNullOrEmpty(item)) 8 { 9 Console.WriteLine(item); 10 } 11 } 12 Console.WriteLine(result.ToJson()); 13 }
原始碼中第4行的地方,呼叫了一個
1 SysHelper.GetCustomDirectory("Path",";");
GetCustomDirectory是另外一個專案中的類的方法
理論上講,如果在VS中打了斷點,執行到此處後,按下F11鍵,就可以進入 GetCustomDirectory 方法內部
但結果是,並未進入,而直接到了下面的第5行 foreach 的位置
使用除錯模組檢視我們在 GetCustomDirectory 方法內部打的斷點,就會顯示如下的報錯
主程式為
這樣的情況,使得我們無法進入程式內部,對內部程式進行更加深入的分析,這樣豈不是阻礙了我們進行除錯,工作就無法開展了
我也找了網上的一些資料,例如:http://www.codingwhy.com/view/12170.html
文章中的一些方法我也使用了,並不是不起作用,而是沒有解決根本的問題。
好似生病了,找了醫生,但醫生診斷完開了藥,但並未對症,所以不起效果
我們就好比醫生,要學會思考,去想想看,這個問題的根源是什麼,為什麼會這樣,百度出來的參考文件到底跟我們遇到的情況對不對症,就知道搜尋的文章對於我們的場景有沒有效果了
下面我跟大家探討一下我的解決思路
步驟
1.遇到問題不要急,不要慌
2.要相信是問題,就肯定有解決的辦法
3.百度搜尋一下,線上是不是有一些我們可以參考的方案或者案例跟自己遇到的情況一摸一樣的
4.去嘗試幾種你認為最為接近的場景的方案
5.如果都沒有解決怎麼辦,這個時候不要慌,重複1,2步驟
6.重新執行,走到報錯的地方,想想看自己在遇到報錯前,對程式做過什麼沒有
7.猜測是不是因為自己不小心點到了什麼地方,才導致了這樣的問題,看看是否可以回退
8.有了以上的解題思路,反覆進行,便能根據錯誤資訊,找到對應的解決方案
案例
那麼我們來解決一下上面遇到的問題,他的原因是什麼
經過我反覆思考後,我想到應該是我自己在第一次執行的時候點選了一個 繼續除錯(不需要再次提醒) 這個按鈕,然後就這樣了
那麼我的想法就是如何讓他再顯示出來
因為這個問題是除錯情況下產生的,VS這個宇宙第一IDE有個很牛的工具-選項,裡面啥都有
於是,我便開啟工具,找到選項
找到除錯選項
檢視除錯常規專案中,仔細理解每項的文字內容,我看到有個啟用“僅我的程式碼”,這個時候我恍然大悟
僅我的程式碼,是不是就是僅僅只是我現在執行的這個程式碼,跟其他關聯的專案類方法都沒有什麼關係,我便嘗試去掉試試
再次執行,結果不出所料,果然斷點進去了
忽然發現,細心真的很重要。
只要思想不滑坡,辦法總比困難多,希望大家能夠非常順暢的寫程式,也非常歡迎大家與我交流