VisualStudio bin\debug フォルダー内の PDB ファイル
-
02-07-2019 - |
質問
すべてが同じ名前空間内にあるわけではなく、複数のプロジェクトで構成される VS (2008) ソリューションがあります。ソリューションをビルドすると、トップレベルのプロジェクトで使用されるすべての DLL トッププロジェクト にコピーされます トッププロジェクト\bin\デバッグ フォルダ。ただし、対応する .pdb ファイルは、他の一部のプロジェクトに対してのみコピーされます。これは、たとえば使用する場合に面倒です。 N依存する.
VS はどの .pdb ファイルを上位レベルの bin\debug フォルダーにコピーするかをどのように決定しますか?VS に他のものもコピーさせるにはどうすればよいですか?
編集:
参考文献は以下のとおりです。すべての DLL は、PDB なしで中央の場所にコピーされます。 トッププロジェクト のみ これらのコピーされた DLL への参照があります。ただし、dll 自体は明らかに pdb の場所を認識しており、(ほとんどの場合) デバッグ フォルダーに正しくコピーされます。
解決
から MSDN:
プログラムデータベース(PDB)ファイルは、プログラムのデバッグ構成のインクリメンタルリンクを可能にするデバッグおよびプロジェクト状態情報を保持します。PDBファイルは、 /ziまたは /ziを使用してC /C ++プログラムをコンパイルするときに作成されます。
したがって、ここでの「問題」は(適切な言葉がありませんが)、DLLの一部がデバッグモードでビルドされている(したがってPDBが生成される)のと、一部がリリースモードでビルドされている(したがってPDBが生成されない)ことのようです。 。その場合は、各プロジェクトにアクセスしてビルド設定を更新することで、簡単に修正できるはずです。コマンド ライン オプションを微調整していない場合、これがデフォルトのシナリオになります。
ただし、そうでない場合はさらに困難になります。おそらく皆さんはリリース モードまたはデバッグ モードにいるでしょう。次に、各プロジェクトのコマンド ライン コンパイル オプション (プロジェクト プロパティで指定) を確認する必要があります。デバッガーが必要な場合は、それらを /debug に更新し、必要ない場合は削除します。
編集に応じて編集する
確かに、DLL は PDB があり、そこへのパスがあることを「認識」していますが、それはあまり意味がありません。他の人が述べたように、DLL だけを特定のディレクトリにコピーしても、この問題は解決されません。PDB も必要です。
Windows で個々のファイルをコピーしても、特定の「バンドル」タイプのファイル (Microsoft の用語ではありませんが、「完全な HTML パッケージ」が概念です) を除いて、関連するファイルはコピーされません。DLL は「バンドル」方法でアセンブルされていないため、DLL をコピーすると PDB が残ります。
唯一の答えは、DLL をこれらの中央の場所に取得するプロセスを更新し、PDB を含めることだと思います。しかし、私はそれが間違っていると証明されたいのです!
他のヒント
他の投稿でも述べているように、コンパイラ/破損の問題がある可能性があります。
ただし、ウィルが言ったように、pdb ファイルが作成されているにもかかわらず、必要な場所に表示されない場合は、ビルド後のステップを作成します。これは、ソリューション内のすべてのプロジェクトに対して定義したビルド後のステップです。すべての出力ファイルが共通のディレクトリにコピーされるようにします。
proj ファイルが \SolutionDir\ProjDir にある場合、ビルド後のステップの最初の行で出力ファイルが \Solution\Bin elease または \Solution\Bin\Debug にコピーされます。これがデバッグ ビルドの場合、2 行目で pdb ファイルがコピーされます。リリース ビルドの pdb ファイルはコピーしません。
したがって、\SolutionDir\Bin には、すべての出力ファイルが 1 つの場所に含まれるようになりました。
xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir)
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir)
まず、何も仮定しないでください。ソリューションをクリーンアップし、デバッグ モードで再構築し、すべての pdb ファイルが作成されたかどうかを確認します。そうでないなら、それはあなたの問題です。
ファイルが作成されても、すべてがコピーされない場合は、pdb ファイルを目的の場所に手動でコピーするビルド後のイベントを作成することで、この問題を回避できます。もちろん、これは単なる回避策です。
他に考えられる唯一のことは、ソリューション ファイルが破損していることです。.sln を XML ファイルとして開き、内容を調べることができます。期待どおりに動作しているプロジェクトの構成を確認し、そうでないプロジェクトと比較します。何も表示されない場合は、これをプロジェクト レベルで繰り返す必要があります。動作している .csproj (またはその他) プロジェクト ファイルと動作していないプロジェクト ファイルを比較します。
編集に応じて編集する:
単に手動でコピーしているだけの場合は、pdb も手動でコピーします。DLL は pdb について何も「認識」すべきではないと私は信じています。それらを宛先ディレクトリに貼り付けて、コーヒーを飲みに行きましょう。リラックス。
溶液を洗浄するときは、それが実際に洗浄されていることを確認してください。クリーンアップした後でも、VS が bin\debug ディレクトリにファイルを残したままになっているのを見たことがあります。すべてのプロジェクトの bin\debug ディレクトリを削除し、再構築します。