0

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_packageManagerpackageManagerMEngine

編集: 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変数/アクセサーと同じように定義されたシステムコンテキスト変数とそのアクセサー

4

1 に答える 1

0

ビルド構成をデバッグからリリースに切り替えましたが、プロジェクトはそのようなエラーなしで実行されます。デバッグ設定に何かあったと思います。

于 2012-09-20T07:36:22.820 に答える