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。 我检查引擎是不是NULL。
engine->setSystemContext(m_system);
工作正常。 我在调试器窗口中看到引擎的相应实例变量设置为m_system。 我介入了引擎 - > setPackageManager(packageManager);并看到它按预期工作。它看起来像
void MEngine::setPackageManager(MPackageManager * packageManager)
{
m_packageManager = packageManager;
}
当我在setPackageManager方法中时,我看到m_packageManager变量设置为packageManager的值。
但是当调试器从setPackageManager
方法返回到main()
时,引擎对象的m_packageManager的值变为0x0。
当我进入getPackageManager()
时,我看到m_packageManager是0x0
。
但在此之后我进入setPackageManager
,我发现m_packageManager
设置为packageManager
的值。在这两种情况下,引擎对象都是相同的。
这对我来说似乎很奇怪。
App使用一个线程。
App使用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变量/访问器
相同答案 0 :(得分:0)
我将构建配置从Debug切换到Release,项目运行没有这样的错误。 我认为调试设置有一些东西。