C++ でいくつかのクラスをファクトリに登録するプロセスを容易にするために、静的初期化を使用しています。残念ながら、コンパイラーは、コンストラクターで有用な作業を行うための「未使用」オブジェクトを最適化していると思います。グローバル変数を最適化しないようにコンパイラに指示する方法はありますか?
class SomeClass {
public:
SomeClass() {
/* do something useful */
}
};
SomeClass instance;
SomeClass のコンストラクターのブレークポイントがヒットしません。私の実際のコードでは、SomeClass はヘッダー ファイルにあり、インスタンスはソース ファイルにあり、多かれ少なかれ単独です。
編集: KJAWolf が推測したように、このコードは実際には実行可能ファイルではなく、静的ライブラリにコンパイルされます。その目的は、静的ライブラリによって提供されるいくつかの型を、型とその作成者の静的リストに登録して、ファクトリが構築時に読み取るようにすることです。これらの型は lib で提供されるため、このコードを実行可能ファイルに追加することは望ましくありません。
また、他の既存のコードを含む別のソース ファイルにコードを移動すると、問題なく動作することがわかりました。これらのグローバル オブジェクトだけで構成されたファイルがあることが問題の原因のようです。その翻訳単位が完全に無視されたかのようです。