簡介
程序員最重要的工作是什么呢,調試
調試過程中難免會遇到各種各樣的奇葩問題,但是只要輸出日志,打斷點就基本上都可以定位並找到問題的真正所在
調試是一個非常有趣的工作,你可以把它當成是闖關,第一次沒找到,就來第二次,一次又一次,便會發現其中的樂趣
今天跟大家聊的這個問題呢,主要是在調試過程中莫名其妙的發生的問題,他阻礙了我們調試的工作,讓我們走進這個問題,一起來學習一下如何解決它
問題重現
我們建立一個測試的方法如下
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有個很牛的工具-選項,里面啥都有
於是,我便打開工具,找到選項
找到調試選項
查看調試常規項目中,仔細理解每項的文字內容,我看到有個啟用“僅我的代碼”,這個時候我恍然大悟
僅我的代碼,是不是就是僅僅只是我現在運行的這個代碼,跟其他關聯的項目類方法都沒有什么關系,我便嘗試去掉試試
再次運行,結果不出所料,果然斷點進去了
忽然發現,細心真的很重要。
只要思想不滑坡,辦法總比困難多,希望大家能夠非常順暢的寫程序,也非常歡迎大家與我交流