0

MacOS X Lion,Xcode 4 我的应用程序是一个命令行工具。我的应用程序中有以下代码

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。我检查引擎不是空的。

 engine->setSystemContext(m_system);

工作正常。我在调试器窗口中看到引擎的相应实例变量设置为 m_system。我进入引擎->setPackageManager(packageManager); 并看到它按预期工作。看起来像

void MEngine::setPackageManager(MPackageManager * packageManager)
{
   m_packageManager = packageManager;
}

当我在 setPackageManager 方法中时,我看到 m_packageManager 变量设置为 packageManager 的值。但是当调试器从setPackageManager方法 to返回时main(),引擎对象的 m_packageManager 的值变成了 0x0。当我踏入 时getPackageManager(),我看到 m_packageManager 是0x0. 但是当我踏入之后setPackageManager,我看到它m_packageManager被设置为packageManager。在这两种情况下,引擎对象都是相同的。这对我来说似乎很奇怪。应用程序使用一个线程。应用程序使用 dylib,其中包含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 变量/访问器相同

4

1 回答 1

0

我将构建配置从调试切换到发布,并且项目运行时没有出现此类错误。我认为调试设置有问题。

于 2012-09-20T07:36:22.820 回答