通過Windows Visual Studio遠端除錯WSL2中的.NET Core Linux應用程式
阿新 • • 發佈:2020-07-11
最近兩天在Linux中除錯.NET Core應用程式,同時我發現在Linux中除錯.NET Core應用程式並不容易。一直習慣在Visual Studio中進行編碼和除錯。現在我想的是可以簡單快速的測試.NET Core應用在Linux。所以通過本篇文章我們能瞭解到如何在Windows中使用Visual Studio進行遠端除錯我們部署在Linux中的應用程式,從而我們可以去發現或者說去除錯在中會產生的一些問題。
# Windows中的Linux:Hello WSL
子系統從這裡我不做過多的介紹了,大家有興趣的話可以從 [https://docs.microsoft.com/en-us/windows/wsl/about](https://docs.microsoft.com/en-us/windows/wsl/about) 中瞭解一下。
第一步從windows開啟wsl
![](https://imgkr.cn-bj.ufileos.com/34ef9501-8690-4d1c-9c48-8f0ab3083f5c.png)
我們可以搜到他並開啟
![](https://imgkr.cn-bj.ufileos.com/09fe1297-6247-49ae-ae81-385a2ff04a99.png)
開啟後我們可以看到如下內容
![](https://imgkr.cn-bj.ufileos.com/b09581ea-befa-4734-9f45-da76b262d6a0.png)
因為一會我需要對他進行除錯所以我這邊選擇的是DEBUG
![](https://imgkr.cn-bj.ufileos.com/14481c50-2cee-4f2f-8339-98b4982ffa48.png)
通過上面一波操作後我們需要做的是在WSL提示符下,輸入dotnet並加上我們的應用程式集名稱
![](https://imgkr.cn-bj.ufileos.com/6e4923f9-8ed2-4aeb-bbbe-6065451503ed.png)
現在我們已經將我們的應用程式釋出到了linux中如下所示
![](https://imgkr.cn-bj.ufileos.com/cb745520-8acb-4f1b-9b9f-9ead687b790d.png)
# 如何附加到正在執行的Linux應用程式
正如上面所述,我想要做的是在Visual Studio中除錯Linux應用程式,那麼下面我們來看一下附加
![](https://imgkr.cn-bj.ufileos.com/53819263-b019-4307-90cb-8a362c6c7c52.png)
SSH連線型別將與具有以下通訊架構的WSL一起使用:
![](https://imgkr.cn-bj.ufileos.com/b07aa9fe-f49c-4cf3-a20e-6b8fbdfc5c25.png)
我們需要安裝vsdbg偵錯程式,然後通過SSH通到將命令傳送到Linux偵錯程式。
1. 預設情況下,SSH伺服器與WSL一起安裝。但是,我無法使整個管道都可以使用,因此必須解除安裝並重新安裝它:
```
sudo apt-get remove openssh-server
sudo apt-get install openssh-server
```
2. 更改SSH配置,以允許 Visual Studio所需的使用者名稱/密碼型別的安全性,如果不知道如何有效地使用vi來簡單地編輯檔案,請安裝nano
```
sudo apt-get install nano
```
3. 在/etc/ssh/sshd_config中,更改PasswordAuthentication設定
```
sudo nano /etc/ssh/sshd_config
PasswordAuthentication yes
```
4. 重啟SSH伺服器
```
sudo service ssh start
```
5. 安裝解壓縮才能獲取vsdbg
```
sudo apt-get install unzip
curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
```
現在我們可以選擇SSH作為連線型別,同時需要點選“重新整理”按鈕將這些資訊填充,如下所示:
![](https://imgkr.cn-bj.ufileos.com/db8da056-56d3-4d33-b3cf-e414a47f1713.png)
單擊“重新整理”按鈕後,底部的列表應包含在WSL中執行的Linux程序。
![](https://imgkr.cn-bj.ufileos.com/b6d337ae-4d3b-46a6-96d6-6f4746862804.png)
選擇.NET Core應用程式,然後單擊附加選擇託管偵錯程式:
![](https://imgkr.cn-bj.ufileos.com/2e1b36ae-520e-4ce1-af4a-76cdc67d52ba.png)
當我們在程式碼中設定斷點之後,並且觸發我們設定的斷點就會達到如下效果:
![](https://imgkr.cn-bj.ufileos.com/92465e2a-4932-417f-a5fb-6f226806a64d.png)
通過上面內容來說我們以達到了我們預期的想法,我們可以通過Visual Studio藉助WSL進行除錯Linux應用程式。當然對於這一塊我也在尋找更便捷的方式,當然我還發現一個 [
.NET Core Debugging with WSL 2](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.Dot-Net-Core-Debugging-With-Wsl2&ssr=false#overview).
# Reference
https://www.hanselman.com/blog/RemoteDebuggingANETCoreLinuxAppInWSL2FromVisualStudioOnWindows.aspx
https://devblogs.microsoft.com/devops/debugging-net-core-on-unix-over-ssh/
https://medium.com/criteo-labs/wsl-visual-studio-attaching-launching-a-linux-net-core-application-on-my-window-10-ab21c179702d
https://github.com/Microsoft/MIEngine/wiki/Offroad-Debugging-of-.NET-Core-on-Linux---OSX-from-Visual