有時候需要遠程調試一些用戶問題,期望能使用本機的 Visual Studio 開發環境,調試遠程的用戶的設備上的應用。這時會遇到的一個問題是如何讓本機的 Visual Studio 可以連接上遠程的用戶的設備,從而進行調試。本文將告訴大家如何采用 FastTunnel 工具,讓本機的 Visual Studio 和遠程的用戶的設備建立調試聯系,搭建遠程調試環境,從而支持遠程調試
開始之前需要先介紹一下 FastTunnel 工具,這是一款高性能跨平臺內網穿透工具,使用它可以實現將內網服務暴露到公網供自己或任何人訪問。對比市面上的其他內網穿透工具最大優勢在于基于 dotnet 編寫,提供二次開發擴展能力。本文將來告訴大家,在不做任何編程的情況下,通過 FastTunnel 工具,搭建遠程調試環境
開始之前需要要求開發者有一臺可公網訪問的服務器,用來作為中繼。現在的開發者,誰還沒有幾臺公網服務器,是在不行,那就掏錢上騰訊云(騰訊,打錢)吧
本文的演示需要三臺計算機設備,其中一臺是服務器,服務器擁有公網 ip 地址。如騰訊云的服務器。不挑服務器的系統,基于 dotnet 的 FastTunnel 輕松做到了在各個系統平臺上運行
另外兩臺分別是開發設備,和用戶設備
咱期望做的就是在開發設備上可以讓開發設備的 Visual Studio 開發環境可以連接上用戶設備進行調試

開始之前,先從?https://github.com/FastTunnel/FastTunnel/releases?下載最新的版本。需要下載一個客戶端版本和一個服務端版本,其中服務端版本將放在服務器上運行,客戶端版本放在用戶設備上運行,開發設備上啥都不需要
當前是 2022.10 最新版本是 2.1.1 版本
先進行服務端的部署
部署服務端的方法是先將下載下來的 FastTunnel.Server 進行解壓縮,下載的時候自己注意一下對應的系統版本,如 Windows 的就應該下載 Windows 的,是 Linux 的服務器就應該下載 Linux 的。但愿我的讀者不會這么傻
接著打開 config 文件夾,編輯里面的?appsettings.json
?文件。這個文件里面寫滿了注釋,相信大家看著注釋就知道是怎么回事。核心關注的就是開發的連接端口。不清楚的話,自己去加 FastTunnel 群問qq群:935214348
完成配置之后,運行 FastTunnel.Server 應用
接下來即可進行客戶端的配置
推薦先在本地寫好配置,再將整個 FastTunnel.Client 壓縮給到用戶設備。因為用戶設備上大部分沒啥好用的編輯工具。另外考慮到現在還有很多用戶都使用 x86 系統,推薦先使用 x86 版本的 FastTunnel.Client 客戶端應用
編輯 FastTunnel.Client 的?appsettings.json
?文件,填寫注釋里寫了必選的 ServerAddr 和 ServerPort 屬性,這兩個屬性需要和服務端配置已知。接著可選填寫 Token 信息,如果你的服務端有更改的話,那這里需要同步更改。接著在端口轉發這里進行編輯,這就是本文的重點,也是進行遠程調試的重點
在 Forwards 屬性里面,填寫本機的遠程調試開放端口,這個開放端口現在還不能完全確定,可以在客戶端開啟遠程調試的時候,動態更改。這里先在 LocalPort 寫入我喜歡的 60123 端口當成遠程調試開放端口。接著編輯 RemotePort 屬性,設置在服務器上開放哪個端口進行對應,我這里選用 1275 作為端口。也就是說訪問服務器的 1275 端口,將轉發到客戶端的 60123 端口上
這里有一點需要注意的是,開放的服務器端口,需要服務器的端口可以被開放。例如上文寫了將本地的 60123 端口,映射到服務器的 1275 端口上,這就要求服務器的 1275 端口是防火墻允許的端口,不能被防火墻攔截
我的配置的內容代碼如下
{"Logging":?{"LogLevel":?{//?Trace?Debug?Information?Warning?Error"Default":?"Information","Microsoft":?"Warning","Microsoft.Hosting.Lifetime":?"Information"}},//?是否啟用文件日志輸出"EnableFileLog":?true,"ClientSettings":?{"Server":?{//?[必選]?服務端ip/域名(來自服務端配置文件的urls參數)?以下是我的服務器,還請換成你自己的"ServerAddr":?"debug.lindexi.com",//?[必選]?服務端監聽的通信端口(來自服務端配置文件的urls參數)"ServerPort":?1270},/***?[可選]?端口轉發?通過專用端口代理,不需要有自己的域名*?可穿透所有TCP上層協議*?遠程linux示例:#ssh?-oPort=12701?{root}@{ServerAddr}?ServerAddr?填入服務端ip,root對應內網用戶名*?通過服務端返回的訪問方式進行訪問即可*/"Forwards":?[{//?[必選]?內網服務所在主機ip"LocalIp":?"127.0.0.1",//?[必選]?內網服務監聽端口?這就是我的遠程調試端口"LocalPort":?60123,//?[必選]?服務端端口?訪問?服務端ip:1274?即可轉發到遠程調試"RemotePort":?1275,//?[可選]?通訊協議,可選值TCP,UDP,默認值TCP 。遠程調試必須選用 TCP 方式"Protocol":?"TCP"}]}
}
完成了配置文件編寫之后,將整個 FastTunnel.Client 拷貝到用戶端,運行 FastTunnel.Client 應用
預期是能看到大概如下的控制臺界面輸出內容
[15:34:49?INF]?=====?FastTunnel?Client?Start?=====
[15:34:49?INF]?正在連接服務端?172.20.114.51:1270
[15:34:49?INF]?Application?started.?Press?Ctrl+C?to?shut?down.
[15:34:49?INF]?Hosting?environment:?Production
[15:34:49?INF]?Content?root?path:?D:\lindexi\FastTunnel.Client.win-x86
[15:35:05?INF]?穿透協議?|?映射關系(公網=>內網)
[15:35:05?INF]???TCP????|?test.cc:1275?=>?127.0.0.1:60123
接著拷貝 Visual Studio 遠程調試工具到用戶設備上,可以將本機的 Visual Studio 遠程調試工具文件夾拷貝過去。對于 Visual Studio 2022 來說,本機的遠程調試工具文件夾默認放在?C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Remote Debugger
?文件夾里面。其他版本的,請參閱?Remote debugging - Visual Studio (Windows) 官方文檔?了解存放的文件夾
將 Remote Debugger 文件夾拷貝到用戶設備上。然后根據所要調試的應用的是 x86 的還是 x64 的等,運行對應文件夾下的 msvsmon.exe 文件。當然,如果明確只需要調試 x86 應用程序,那也只需要拷貝 Remote Debugger 文件夾里面的 x86 文件夾即可
打開 msvsmon.exe 文件,打開之后進行一些配置,對于用戶的設備上來說,快速的調試可以選用不安全的方式,也就是沒有帶用戶權限的方式進行調試,這樣的調試就不需要登錄用戶設備的用戶賬戶,比較方便
點擊工具選項,進行選項設置。先修改遠程調試開放端口號,如上文,上文使用的是 60123 端口,于是這里需要修改為 60123 端口。接著選擇不安全的?無身份驗證
?和勾選允許任何用戶進行調試選項,如下圖

這個勾選?無身份驗證
?是比較危險的,記得調試完成要幫用戶關閉 msvsmon.exe 應用。因為這就意味著任何能訪問到用戶設備遠程調試端口的人都可以掛上調試,而掛上了調試了,還有啥不能做的。這也是我為什么不使用默認的遠程調試端口的原因
完成配置之后,點擊確認,可以看到 msvsmon 輸出了啟動成功
回到自己的開發設備上,開始打開 VisualStudio 進行遠程調試
點擊 調試->附加到進程
先選擇連接類型為 遠程 的方式。由于采用的是非內網的調試,不要選擇默認的方式,默認的方式基本上是找不到的

在連接目標里面輸入服務器的地址和映射遠程調試的端口,例如我的配置是?debug.lindexi.com:1275
?的,界面如下

輸入完成之后,按下回車。如果成功的話,就可以看到列出用戶設備上所有能被調試的進程

選擇感興趣的進程,即可開始調試
更多請看?FastTunnel-開源內網穿透框架 - gui.h - 博客園