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 变量/访问器相同