質問: 環境と状況 ----- ローカルPC Windows10 x64 VisualStudio2017 仮想環境 Windows10 x64 ローカルPCでアプリケーション作成し、そのインストーラにて仮想環境にてアプリをインストールした。 リモートデバッガを使って、仮想環境のアプリケーションのプログラムをローカルPCからデバッグしようとしている。 やりたいこと ------ 仮想環境にインストールしたアプリケーションのデバッグをローカルPCから行いたいが、 ReleaseモードでのデバッグしかできないのでDebugモードでデバッグを行いたい。 (Release版でのデバッグはできたのですが、最適化のせいでうまくデバッグできないため) 困っていること ------- 仮想環境のプログラムのBinフォルダ内のdllはRelease版のDLLを使っているようなので、 デバッグを行いたいプロジェクトのdllをDebug版のdllに変更しても動かないのでデバッグできない。 調査したこと ------ 上記サイトを参考にすると、Debug版は~d.dllファイルを参照していると記載がある。 なので、仮想環境のBinフォルダ内のdllやexeをすべてDebug版に差し替えた。 そしてアプリケーションを起動してみると 「mfc140d.dllが見つからないため、コードの実行を継続できません。」というエラーがでる。 ということは、アプリケーションは、mfc140.dllを参照しようとするが、 差し替えたdllやexeがmfc140d.dllを参照しようとしているのではないか? なのであれば、mfc140d.dllを参照しようとしている原因を突き止めればいいのでは? ここまで考えたのですが、これ以上先に進みませんでした。 そもそも、Release版の中にDebug版のdllを混在させること自体が間違っているのか。 それすらわかりません。 Dependency WalkerでDebug版とRelease版の依存関係を調べると、 Debug版 :mfc140d.dll Release版:mfc140.dll となっていたので、Debug版がmfc140d.dllを参照しようとしていることは確かと思います。 どなたか知見ございましたらご教授いただけませんでしょうか?
回答: リモートどうこうはとりあえずおいといて単純にデバッグすることを考えると `Release` ビルドした EXE は `mfc140.dll` を参照している `Debug` ビルドした EXE は `mfc140d.dll` を参照している のは調査の通り。 一般ユーザーに配布してよい `vcredist.exe` では `mfc140.dll` はインストールされるけど `mfc140d.dll` はインストールされない、のも周知の事実。 そして EULA 的に `mfc140d.dll` は配布禁止になっている ということで、普通に考えて「デバッグしたい環境に Visual Studio をインストールしてデバッグする」のが最短だと思われます(ライセンス問題がクリアであるとして)他の方法は遠回りすぎて時間の無駄っぽい。そうしたらリモートデバッグも不要で(仮想環境上で普通にデバッグすればよい)悩ましいことがなくなるはずです。