Windows

Visual Studio リモートデバッグ方法(リモートのWindowsアプリをデバッグ)

*記事内に商品プロモーションを含む場合があります

Visual Studioで、Windowsのプログラム(アプリ)をリモートからデバッグする方法を紹介します。

Visual StudioをインストールできないWindowsマシンに対してプログラムをデバッグするときに役に立ちます。

環境依存で、特定のマシンでしか発生しないことが多いんですよね。他のマシンで再現テストを実施しても再現できないときの最終手段です。

重要なWindows Serverマシンなので、Visual Studioをフルでインストールは駄目。

システムのDLLなどが更新され、他のアプリの動作に影響がある可能性があるからだよ。

Visual Studioのインストールや基本的な操作は以下の記事を参照ください。

初心者向け Visual Studio 2022 インストール/ビルド/実行方法Windowsのプログラミングで必要な『Visual Studio 2022』の紹介です。 (Visual Studio 2019でも...

このブログ記事の内容を実際に動作させて動画で説明しています。

VisualStudioのリモートデバッグとは

Visual Studioのリモートデバッグとは、別のWindowsマシンに配置されているVisual Studioで作成したプログラムをリモートからデバッグするための機能です。

リモートデバッグを行うには、デバッグ対象のWindowsマシンにリモートツールをインストールし、Visual Studioからリモートコンピューターに接続するようにプロジェクトを設定する必要があります。

リモートデバッグを利用すると、ローカルマシンにプログラムをインストールすることなく、ブレークポイントやステップ実行などのデバッグ機能を使用できます。

リモートデバッグは、C#、VisualBasic、C++などのさまざまな言語やプロジェクトタイプに対応しています。

TCP/IP接続を行うので、デバッガに使うポート番号にアクセス許可が必要です。

例えば、社内にある自分のWindowsマシンとサーバ室にあるWindowsマシンなど。

リモートデバッグの手順

最新のVisual Studio 2022 を使って説明しますが、VS2019やVS2017でも同じ流れです。

C++で作成したコンソールアプリケーションで動作確認しました。

0.【リモート】リモートデバッグツールのインストール
1. プログラムのビルド
2. プログラムのコピー
3.【リモート】リモートデバッガ実行
4.【リモート】プログラムの実行
5. VisualStudioで実行プログラムにアタッチしデバッグ

【リモート】と記載部分は、リモートのWindowsマシンでの作業です。

リモートデバッグツールのインストール

リモートマシンにリモートデバッグツール「Remote Tools for Visual Studio 」をインストールします。

「Remote Tools for Visual Studio」をダウンロードします。

https://learn.microsoft.com/ja-jp/visualstudio/debugger/remote-debugging?view=vs-2019

https://learn.microsoft.com/ja-jp/visualstudio/debugger/remote-debugging?view=vs-2022


リンクを押しても「Remote Tools」にジャンプしない場合は、「ダウンロード」を選択し、検索キーワードに「Remote Tools for Visual Studio」を入力すると Visual Studioのバージョンごとに表示されるので、利用中のVisualStudioを選択します。
管理者権限でインストールします。

ランタイムライブラリ(再頒布可能パッケージ)のインストール

プログラムに必要な Visual Studio の Microsoft Visual C++ 再頒布可能パッケージをインストールします。

Visual Studio の Microsoft Visual C++ 再頒布可能パッケージ

「Visual Studio 2022 の Microsoft Visual C++ 再頒布可能パッケージ」が必要なのでそれもダウンロードします。32bitか64bitを選択します、ここで選ぶのはデバッグしたいプログラムと同じものです。

ビルドしたプログラムが64bitの場合は64bit(x64)を使用します。

ビルドしたプログラムが32bitの場合は32bit(x86)を使用します。

リモートマシンに余計なランタイムライブラリを入れたくないので、C++やC言語で開発したプログラムは、後述するDLLをコピーする方式のほうがマシン環境を変えずに便利だと思います。

プログラムをリモートPCにコピー

ビルドしたプログラムを Debugフォルダごと丸ごとコピーします。プログラムをデバッグするために、拡張子が.exe以外のデバッグ情報が保存されているPDBファイルも必要になります。
PDBファイルは、アプリケーションのソースコードと実行コードを対応付けるために必要なファイルです。

リモートデバッガの実行

リモートPCでリモートデバッガの初期設定を行います。
リモートPCで「Remote Debugger Configuration Wizard」を起動します。

サービスとして実行する必要はないので、そのまま「次へ」を選択します。

ファイヤーウォールの設定で、上の2つで問題なし。

「Remote Debugger」を起動します。この画面が出れば待機状態になっています。

リモートデバッグツールのポート番号を確認

リモートデバッグツールが利用するTCP/IPのポート番号を確認します。
「ツール」-「オプション」で確認。4026でした。

リモートPCでデバッグするプログラムの実行

リモートPCでコピーしたプログラムを実行します。

今回は、ローカルからアタッチしやすいように入力待ちにしています。sleepを入れてもいいと思います。

Visual Studioでプロセスにアタッチ

Visual Studioでリモートで実行されているプログラムにアタッチします。

図の⑤の作業です。


ローカルPCでVisual Studio を起動し、「デバッグ」-「プロセスにアタッチ」をクリックします。
「接続先」に、[リモートPCのIPアドレス]:4026 と入力して「検索」ボタンを押し、デバッグ対象のプログラムを選択します。

ローカルPCでデバッグ

画像のようにVisual Studioにデバッガで実行中のソースが表示されます。通常のデバッガの使い方と同じです。

画面アプリのように入力を待っている場合は、リモートPC側でアプリの操作が必要です。

ランタイムライブラリが不足

ランタイムライブラリ(再頒布可能パッケージ)のインストールしても、デバッグ版でビルドした場合、デバッグ用のDLLが不足する場合があります。

ビルドしたときのローカルPCには、含まれているので、それをすべてDebugフォルダにコピーする方法もあります。

Windowsの実行可能ファイル(exe)は、カレントディレクトリに存在するファイルを読み込むので、この方法が使えます。

必要なファイルをローカルPCでVisual Studioで実行すると「出力」ウィンドウにファイル名が表示されます。

これをコピーすると動作します。


■テキスト部を抜き出すと以下になります。Windowsディレクトリにあります。

win-remote-debug.exe’:’C:\src\win-remote-debug\x64\Debug\win-remote-debug.exe’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\ntdll.dll’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\kernel32.dll’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\KernelBase.dll’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\apphelp.dll’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\msvcp140d.dll’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\vcruntime140_1d.dll’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\vcruntime140d.dll’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\ucrtbased.dll’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\kernel.appcore.dll’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\msvcrt.dll’ が読み込まれました。
‘win-remote-debug.exe’:’C:\Windows\System32\rpcrt4.dll’ が読み込まれました。

C:\Program Files\Microsoft Visual Studio\ フォルダ以下を検索すると、以下のような場所にもデバッグ用のランタイムライブラリがあります。

私の環境では以下にありました。

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.32.31326\debug_nonredist\x64\Microsoft.VC143.DebugCRT

あとがき

今回は、簡単なプログラムが動作するところまでを紹介しました。
有用なノウハウなど発見したら、追記していく予定です。

[初心者向け]VisualStudioデバッグ方法(プログラムが正しく動作しない時に)マイクロソフトの無料で使えるVisual Studio を使ったデバッグ方法を紹介します。 画像は、Visual Studio 2...

最後に(Windows VPSを紹介)

最後にWindowsの開発者が知っているとお得なことを紹介します。

クラウド上のWindows Serverがリーズナブルな価格で即日利用可能なVPSサービスが存在します。動作検証などで1ヶ月だけの利用などの用途にも使えます。

物理サーバマシンを手配したことがある方は分かりますが。

物理サーバを用意する場合は、メーカーにサーバマシンの見積りを取って、手配をして搬入して設置し、Windowsをインストールしてネットワークなどを設定してやっと使えるようになります。(どんなに早くても週単位で時間がかかります)

「ConoHa」と「さくらVPS」では、契約アカウントの作成からWindows Serverが使えるまで、30分かかりません。
(他の会社のVPSは、次の営業日だったりと開始まで時間がかかります。)

ConoHa の VPSは時間課金をサポートしているので、2、3日だけ使うという用途でも利用可能です。(4時間だけという使い方もできます)

私は記事を書くための調査や動作確認にConoHaのVPSを使っています。ローカルのPCにいろいろソフトをインストールするとWindowsが不調になるので。

Windows VPSの魅力とは?詳細な使い方とおすすめプラン選びを紹介!VPS Windows Serverは超便利クラウド上でWindowsやMS-officeが使える「Windows VPSサービス」があります。 Windows VPSサービ...
ConoHa for Windows Serverのプランを体験!2GB/4GB/8GBの選び方と注意点ConoHa for Windows Server を使えば、自宅の古いWindows PCを単なる操作用端末にして、サーバ側(Wind...

Windows VPSの使い方を動画で紹介しています。
VPSの払い出し(構築)を行い、アプリを動作させて使い勝手を検証しています。