5

Delphi 6 DirectShow DLL でブレークポイントがヒットしないという大きな問題がありました。IDE に DLL (AX) をロードし、Graph Edit をホスト プログラムとして実行すると、ブレークポイントがトリガーされません。FastMM4 DLL をプロジェクト ディレクトリに移動し、FastMM4 を完全に削除し、Debug DCU のオンとオフを切り替え、プロジェクト ディレクトリを消去し、DLL の登録解除と再登録を行いました。何も機能しませんでした。ホスト プログラムを実行するたびに、DLL がロードされ、イベント ビューアーに「デバッグ情報がありません」というメッセージが表示されました。次に、必死の Google 検索で、「リモート デバッグ シンボル」リンカー オプションを試すことを推奨する C++ Builder の投稿を見つけました。

Project -> Options -> Linker (Tab) -> Exe and DLL options (group box) -> "Include Remote Debug Symbols" (チェックあり)

突然、ブレークポイントがヒットし始めました。ここに私の質問があります:

1) なぜこれが機能したのですか? それはオプションのためですか、それともこのオプションが問題を修正する他のコンパイラ/リンカー操作をトリガーしたためですか? 将来この問題が再発したときに確実に修正できるように、知りたいです。

2) リモート デバッグ シンボルは、悪意のあるプログラマーが私のプログラムを詳細にトレースするために使用できるものですか? 言い換えれば、放置するとセキュリティリスクになるのでしょうか?

4

1 に答える 1

5

1) オプションのせいでした。デバッグ シンボル情報がなければ、IDE はブレークポイントを設定する場所を認識できません。デバッグ DCU はそれとは関係ありません。このオプションは、デバッグ情報を含む VCL DCU の別のセットにリンクするため、ブレークポイントを設定できます。役立つヒント: Delphi のバージョンによっては、実際には、これらの DCU が常にデバッグ シンボルと同期しているわけではありません。

2) デバッグ シンボル/マップ ファイルは、特にプログラムによって処理される情報が何らかの形で機密である場合は、リリースに出すべきではありません。これは、どのプログラミング言語にも当てはまります。

リリース後にソフトウェアを診断する機能が必要な場合は、ログからバグをトリアージするのに十分な情報を提供する例外、エラー、およびアサーション処理を組み込みます。

于 2012-01-24T23:43:20.783 に答える