アプリケーションのdllをDebug版に変更してデバッグしたいが、動かない

投稿者: Anonymous

環境と状況

ローカルPC Windows10 x64 VisualStudio2017
仮想環境 Windows10 x64

ローカルPCでアプリケーション作成し、そのインストーラにて仮想環境にてアプリをインストールした。
リモートデバッガを使って、仮想環境のアプリケーションのプログラムをローカルPCからデバッグしようとしている。

やりたいこと

仮想環境にインストールしたアプリケーションのデバッグをローカルPCから行いたいが、
ReleaseモードでのデバッグしかできないのでDebugモードでデバッグを行いたい。
(Release版でのデバッグはできたのですが、最適化のせいでうまくデバッグできないため)

困っていること

仮想環境のプログラムのBinフォルダ内のdllはRelease版のDLLを使っているようなので、
デバッグを行いたいプロジェクトのdllをDebug版のdllに変更しても動かないのでデバッグできない。

調査したこと

https://docs.microsoft.com/ja-jp/cpp/windows/preparing-a-test-machine-to-run-a-debug-executable?view=vs-2019
上記サイトを参考にすると、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 をインストールしてデバッグする」のが最短だと思われます(ライセンス問題がクリアであるとして)他の方法は遠回りすぎて時間の無駄っぽい。そうしたらリモートデバッグも不要で(仮想環境上で普通にデバッグすればよい)悩ましいことがなくなるはずです。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *