MacOS X Lion、Xcode4私のアプリはコマンドラインツールです。私のアプリには次のコードがあります
int main(int argc, const char * argv[])
{
MSystemContext * m_system = new MCommandLineContext();
MPackageManagerNPK *packageManager = new MPackageManagerNPK();
MEngine * engine = MEngine::getInstance();
engine->setSystemContext(m_system); // system context
// Strange behavior here:
engine->setPackageManager(packageManager);
MPackageManager *ppPackageManager = engine -> getPackageManager();
engine->setPackageManager(packageManager); //
engine->setPackageManager(packageManager); //
return 0;
}
m_systemとpackageManagerが作成し、NULLではないことをデバッガーでチェックインします。エンジンがNULLでないことを確認します。
engine->setSystemContext(m_system);
正常に動作します。デバッガウィンドウで、エンジンの対応するインスタンス変数がm_systemに設定されていることがわかります。engine-> setPackageManager(packageManager);にステップインします。期待どおりに機能することを確認します。のように見えます
void MEngine::setPackageManager(MPackageManager * packageManager)
{
m_packageManager = packageManager;
}
setPackageManagerメソッドを使用しているときに、m_packageManager変数がpackageManagerの値に設定されていることがわかります。ただし、デバッガーがsetPackageManager
メソッドからmain()
に戻ると、エンジンオブジェクトのm_packageManagerの値は0x0になります。にステップgetPackageManager()
インすると、m_packageManagerが。であることがわかります0x0
。しかし、その後に入ると、それがの値に設定されてsetPackageManager
いることがわかります。どちらの場合も、エンジンオブジェクトは同じです。これは私には非常に奇妙に思えます。アプリは1つのスレッドを使用します。アプリはクラスを含むdylibを使用します。何がそのような振る舞いを引き起こす可能性がありますか?どうすればこれをデバッグできますか?m_packageManager
packageManager
MEngine
編集: MEngineクラス(部分的に):
// .h
class M_ENGINE_EXPORT MEngine
{
private:
...
MPackageManager * m_packageManager;
public:
MEngine(void);
...
inline MPackageManager * getPackageManager(void){ return m_packageManager; }
// .cpp
MEngine::MEngine(void):
m_packageManager(NULL)
{
}
MEngine * MEngine::getInstance(void)
{
static MEngine m_instance;
return &m_instance;
}
packageManager変数/アクセサーと同じように定義されたシステムコンテキスト変数とそのアクセサー