Windowsの開発者ですと、複数人で開発しているときにWindows端末にリモート接続して開発を行う場面もあるかと思います。
でも、リモートデスクトップには接続数の制限がありますよね。
Windows10だと1人しかアクセスできませんし、Windows Serverだとクライアントアクセスライセンス(CAL)が必要になります。
でも、デバッグするのにCALを使うとかちょっと本末転倒な感じもしますよね。
リモートデバッガを仕込んで動かせば、開発端末からサーバー端末に接続してデバッグなんかも可能ですが、
RDP接続してリモートデバッガ仕込んでも、CALを消費することには変わりありません。
そこで思い立ったのが以下の方法です。
PowerShell でEnter-PSSessionしてリモートデバッガを動かす
まあ、それだけなんですけど、やってる人を知らないのでご紹介します。
リモート接続の設定方法
設定は、 PowerShellで遠隔操作の準備 - Qiita を見ていただけたらわかるのではないでしょうか。
接続先で Enable-PSRemoting する感じ。
で、接続する方は
PS > Enter-PSSession コンピュータ名 -Credential アカウント
します。
リモートデバッガの仕込み方
接続できたら、リモートデバッガを起動します。
[コンピュータ名]: PS > & '<Visual Studio のインストール ディレクトリ>\Common7\IDE\Remote Debugger\(x64、x86、Appx)\msvsmon.exe' /nofirewallwarn
です。
コマンド自体はリモート デバッグ - MSDN - Microsoft から引用しただけですが、ポイントは
/nofirewallwarn
です。
環境によってオプションは変わるかと思います。
一度リモートデスクトップ上でリモートデバッガを起動させればわかりますが、
いろいろと確認ダイアログが表示されます。
ダイアログが表示されてしまうとリモートデバッガが開始されません。
ここを探るのが難しいところですね。
で、別のPowerShellでEnter-PSSessionして
[コンピュータ名]: PS > Get-Process
すると、
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
(略)
112 9 1616 5296 40 0.03 3760 0 msvsmon
117 10 1532 4936 40 0.02 4600 0 msvsmon
146 13 2988 9816 86 0.06 6600 0 msvsmon
と、Session IDが0でリモートデバッガが起動されます。便利!
リモート接続してデバッガを起動するとSession IDは1とか2とか3とかになるはずです。
あ、ちなみにPowerShellのバージョンが古いとSIが表示されないと思います。
その場合は、
[コンピュータ名]: PS > Get-Process | Where-Object -FilterScript {$_.SessionId -eq 0}
とかやれば、Session ID 0のものだけを表示できるので、msvsmonを確認することが出来ると思います。
動かない場合もあったり、微妙にグレーな気もしたりしますが、
デバッグスキルはとても大事なので頑張りたいですね!