2011-06-21 3 views
1

削除オペレータに間違ったバージョンのdll(MSVCR90.dllの代わりにMSVCR90.dll)が使用され、クラッシュが発生します。コールスタックでは、パスではなくdll名のみが表示されます。パスを見るには?Microsoft Visual Studio:DLLがどこからロードされているかを調べるには?

編集:私はデバッグモードではなく、リリースモードでビルドしています。だから、なぜ、デバッグDLLが使用されるのですか?他の多くのWebサイトでも同じ問題が報告されていますが、実際の解決策は見つけられませんでした。 昨日私は、依存性ウォーカーを使用して、デバッグdllが取得されていることを発見したので、dllの名前を変更してから、リリース版が依存性ウォーカーでピックアップされ、プログラムもクラッシュしませんでした。私は今日何も変えなかったが、プログラムは再びクラッシュし始めた。そして、依存関係のウォーカーツリーが表示されたら、MSVCR90d.dll(デバッグDLL)に疑問符が表示され、パスに見つかりませんでした。なぜそれはリリースDLLをピックアップできないのですか?また、私は、デバッグDLLが実行時にどこから使用されるかわからない。

+0

はなかった> [オプション]> [プロジェクトとは、ソリューション> VC++ディレクトリツールの下で実行可能ファイルの設定にDLLへのパスを追加することができ、回答のいずれかがあなたのために働きますか?そうでない場合は、他の解決策を見つけましたか?はいの場合は、ここに投稿して回答として受け入れる必要があります。 –

答えて

0

DLLの詳細を見つけるために、あなたは私はあなたがDEBUGビルドを作成しているためか、ddllの名前に追加されていると思うし、あなたのケースでは、しかしDependencyWalker

を使用する場合があります対応するDEBUGバージョンのすべてのdllsがロードされています。

あなたがRELEASEビルドを作成することを選択した場合、あなたはあなたがdllファイルのパスを知っている必要はありませんMSVCR90.dll

+0

デバッグビルドではなく、リリースビルド(デバッグシンボルを有効にした状態)を作成しました。私はなぜMSVCR90d.dllのデバッグバージョンが取得されるのかわかりません。 –

+0

私はVSもデバッグバージョンを使用すると思います。それなしで一度試してみると、それが確認されます。その後、適切な回答を得るために、新しい質問を再投稿したり、それに応じて修正することができます。 –

+0

コンパイラとリンカの設定でデバッグオプションを削除しただけで、同じ問題に直面しました。デバッグDLLが使用され、クラッシュします。 –

0

に追加dを持っていないでしょう、あなたは、delete演算子のデバッグバージョンが呼び出された理由を理解する必要があります。多分、_DEBUG定数はリリース構成で定義されています。

1
  1. グローバルPATH環境変数に追加できます。 Refer here
  2. dllを手動で指定するには、ソリューションを右クリックして[参照の追加]を選択し、特定のdllを参照します。
  3. あなたは
+1

@Ozair Kafrayの返信にも同意します! – Jayesh

+0

ちょっとJayesh、私の編集した質問をもっと詳しく見てください。 Release dllを含むディレクトリへの参照を追加しましたが、実行時の動作に変更はありません。プログラムをビルドしたので、デバッグDLLがどこから取得されたのか、なぜデバッグDLLが使用されるのか分かりませんリリースモード。 –

+0

正常に間違ったものを選んではいけません。 [Fiddler](http://www.fiddler2.com/fiddler2/)ツールを使用して、Webアプリケーションのルートを分析してください.... – Jayesh

関連する問題