LoginSignup
3

More than 5 years have passed since last update.

CALを消費せずにリモートデバッグを利用する

Last updated at Posted at 2017-12-03

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を確認することが出来ると思います。

動かない場合もあったり、微妙にグレーな気もしたりしますが、
デバッグスキルはとても大事なので頑張りたいですね!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3