[轉]Debugging into .NET Core源代碼的兩種方式


本文轉自:http://www.cnblogs.com/maxzhang1985/p/6015719.html

一、前言

   .NET開源時間還不長,因為一直在做YOYOFx的關系,所似我常常有更深入的了解.NET Core和ASP.NET Core內容的需求,並且.NET Core平台與之前版本的變化太大,這也導致我經常要去查看源代碼中,來了解ASP.NET Core和.NET Core代碼實現。

  的確,.NET Core和ASP.NET Core的源代碼,現在已經在Github上進行了代碼托管;但不管是在Github上在線閱讀或是將源代碼Clone到本地閱讀,都比較有局限性,我最想要的還是能通過調試的方法,單步的對程序進行DEBUG調試斷點到源代碼中。

  我寫這篇文章的目地也是描述一下,如何調試.NET Core源代碼的步驟,我總結了兩種對.NET Core源代碼的方法。

二、符號服務器

  以前微軟給我們調試.NET程序的方法,通常是在Visual Studio加入符號服務器,來調試.NET托管程序。我們這次使用同樣的方法,來完成這個調試源代碼的任務。

  首先.NET Core的符號服務器地址:https://dotnet.myget.org/F/dotnet-core/symbols/ ,關於這個符號服務器地址是怎么找到的,還是去MyGet上去多溜溜,發現肯定會不少。

  我們這次使用Visual Studio 2015 Update3,來完成以下操作:

  1.設置符號服務器

  在VS2015的Tools -> Options -> Debugging ->Symbols中,添加符號服務器地址:https://dotnet.myget.org/F/dotnet-core/symbols/ ,然后最好清一下符號文件的緩存。

  2.設置VS2015支持調試進框架源代碼

  Tools -> Options -> Debugging ->Symbols -> General中,勾選Enable .NET Framework source stepping和Enable source server support 兩個選項。

  現在就可以進行單步調試進.NET Core的源代碼中了,只是第一次DEBUG加載的時候,會非常的慢,符號服務器在國外嘛,真的是比較慢,而且不會一次性全部下載並加載進來,可能在調試到某些斷點時,還要進行符號文件的下載,不過這種方法,也有好的一面,比如所有代碼都能看到源代和調試了包括.NET Core的Fx。

三、項目中添加ASP.NET Core源代碼

  第二種方式,是通過將源代碼加入到項目中以達到代碼調試的能力。這次以ASP.NET Core的源代碼為例,同學們可以舉一反三,這次使用的環境為.NET Core 1.0.1,當然ASP.NET Core MVC項目的版本也要與之對應。

  1.Clone源代碼

  我們先Clone一份ASPNETCore.MVC的源代碼到本地,因為我們這次使用的版本是1.0.1所以Clone后查看下包括的版本信息。

復制代碼
  1. D:\Projects\AspNet\Mvc [master ≡]> git tag
  2. 1.0.0
  3. 1.0.0-rc2
  4. 1.0.1
  5. 6.0.0-alpha2
  6. 6.0.0-alpha3
  7. 6.0.0-alpha4
  8. 6.0.0-beta1
  9. 6.0.0-beta2
  10. 6.0.0-beta3
  11. 6.0.0-beta4
  12. 6.0.0-beta5
  13. 6.0.0-beta6
  14. 6.0.0-beta7
  15. 6.0.0-beta8
  16. 6.0.0-rc1
  17. rel/1.0.1
  18. D:\Projects\AspNet\Mvc [master ≡]>
復制代碼

  我們需要的版本為rel/1.0.1,如果Clone的版本不正確也可以git checkout 1.0.1下。

  2.修改global.json

  接下來,我們要修改項目根目錄中的global.json文件:

復制代碼
  1. {
  2. "projects": [ "src", "test", "D:\\Projects\\AspNet\\Mvc\\src" ],
  3. "sdk": {
  4. "version": "1.0.0-preview2-003131"
  5. }
  6. }
復制代碼

  在文件加入Clone下來的ASPNETCore源代碼的路徑。當然這里要注意,VS2015里創建項目模板可能會有版本問題,SDK使用的是1.0.0-preview2-003131版本,還有project.json里的程序集版本也要與源代碼提供的版本保持一致!完成這個步驟后我們等待一會,整個項目就是重新來還原包信息和編譯。

  當然還是會出現一些小問題,比如項目編譯時會找不到AspNetCore項目編譯出來的DLL文件,這是因為如果Clone下來的源代碼與你的項目不在一個目錄下的話,會導致找不到編譯出來的程序集,解決方法也很簡單,修改下編譯參數,我的做法是修改.xproj的方法。

  將下載的ASP.NET Core的源代碼中的項目文件 *.xproj 依次打開找到如下行:

 

  1. <OutputPath Condition="'$(OutputPath)'=='' ">..\..\artifacts\bin\</OutputPath>

 

  將其修改為:

  1. <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>

四、寫在最后

好了經過以上的步驟,現在再編譯就可以通過了,接下來,下斷點吧。 以上的兩種方法都可以舉一反三,找到符號文件或編譯源代碼加入項目目錄,都可以編譯調試任何.NET Core開源代碼。

 

 

GitHub:https://github.com/maxzhang1985/YOYOFx  如果覺還可以請Star下, 歡迎一起交流。

 

 

.NET Core 和 YOYOFx 的交流群: 214741894  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM