7

私は通常、Windows 開発には携わっておらず、ツールチェーンとビルド システムにまったく慣れていません。私の組み込み製品のファイル システムには、サード パーティ製の Windows DLL がいくつか含まれています (これらは、ファイル システムをマウントする Windows マシンで使用されます)。

問題があります。これらの DLL の最新リリースは、以前のビルドに比べてサイズが 3 倍になり、ファイルシステムに収まりません。DLL の機能には多くの変更が加えられていないため、開発者はこのドロップでデバッグ シンボルを削除するのを単に忘れていたのではないかと思います。質問させていただきますが、時差や言語の違いにより回答までに数日かかる場合がございます。

VisualC に不慣れな人のために簡単な手順を使用して、DLL にまだデバッグ情報が含まれているかどうかを判断する方法と、それを削除する方法を説明してもらえますか?

4

5 に答える 5

6

Rebase は Microsoft ツールセットの一部です。dll のベース アドレスを設定するだけでなく、添付されたデバッグ情報を別の .dbg ファイルに削除することもできます。

リベース -i 0x10000000 -a -x .\ -p

理論的には、dll が既に一意のベース アドレスに構築されているかどうかを判断して、それを使用する必要があります。または、ベース アドレスを選択して、アプリケーションで使用される他の dll との衝突の可能性を最小限に抑え、Windows が dll をロードするときにパッチを適用する必要がないようにします。ローダーがセキュリティ機能としてモジュールのロードアドレスを定期的にランダム化する時代に、ベースアドレスを具体的に設定することにこれ以上苦労する価値があるかどうかはわかりません。

于 2008-10-14T08:29:29.887 に答える
6

通常、デバッグ情報自体は*.pdb、UNIX のようにバイナリに追加されるのではなく、別のファイル (プログラム データベース) として構築されます。開発者が実際にライブラリのデバッグ バージョンをビルドした場合、より深刻な問題は依存関係の問題である可能性があります。バイナリのリリース バージョンが にリンクされているMSVCRT.DLL場合、デバッグ ビルドは にリンクされMSVCRTD.DLLます (他のランタイム ライブラリも同様に D サフィックスが付いた名前になります)。特定のバイナリの依存関係を見つけるには、次を試してください。

dumpbin /imports whatever.dll

これにより、ライブラリのすべてのランタイム依存関係が表示されますwhatever.dll(ライブラリ名とそれらのライブラリのシンボルの両方がリストされていることに注意してください)。期待する依存関係のリストが表示されない場合は、元の開発者に適切なビルド モードでライブラリを再構築してもらうことによってのみ修正できる問題がある可能性があります。

于 2008-10-09T19:07:39.427 に答える
3

デバッグ バージョンはデフォルトでコードの最適化を無効にしてコンパイルされるため、面倒だとしても、開発者からリリース バージョンを取得することをお勧めします。そのため、何らかの方法でデバッグ情報を取り除いたとしても、効率的ではないコードが残ることになります。(デバッグ トラップやメッセージが含まれている可能性があることは言うまでもありません。)

使用している DLL の種類を特定する限り、Dependency Walkerを使用して、DLL が VC ランタイム ライブラリのデバッグ バージョンまたはリリース バージョンにリンクされているかどうかを確認できます (これらのライブラリが静的にリンクされていないと仮定します)。

于 2008-10-09T19:13:51.130 に答える
2

依存関係ウォーカーは依存関係を表示しますが、デバッグ情報が削除されたかどうかは示しません。両方を表示するには、 PeStudioを使用 します。

于 2010-09-21T02:51:51.193 に答える
0

現時点では、有効なリリース バージョンを取得するなどの他の提案は無視します。開発者が探しているツールは、実際にlink.exeは Visual Studio (または SDK または WDK) からのものです。

彼らのコードと一緒にデバッガーを利用できるようにしたい場合は、パブリック PDB ファイルを作成することができます。彼らが使用したいオプションは次のとおりです。

  /PDB:filename
  /PDBSTRIPPED:filename

しかし、残念ながらあなた自身ではどうすることもできません。PDB ファイル自体は別個のファイルであり、デバッグ情報は通常、最近の MS コンパイラのバイナリには含まれません(ただし、いくつかの RTTI のものは含まれる場合がありますが、ファイル名ASSERTや同様のマクロや「関数」の文字列は言うまでもありません。知覚された肥大化の最も可能性の高い説明)。

注: binplace.exefrom the WDK は上記のフラグと同じ機能を提供しますが、やや複雑な (WDK ビルド プロセスには適していますが) 構文を使用します。

于 2012-05-04T23:16:52.783 に答える