7

我对 VS2010 有一个奇怪的问题(构建一个大型 C++ 项目)。开始调试时,执行类似于无限循环。我在 main() 的第一行放了一个断点,但断点从未到达。我也试过 F11 进入 main(),但没有效果。任务管理器显示了我的应用程序的一个实例,控制台只显示“xxx.dll Symbols loaded”。我试图暂停执行,但我陷入了一些程序集循环,如果有人可以阅读,这里是程序集:

0000000077226129  lea         rdx,[rsp+88h]  
0000000077226131  xor         ecx,ecx  
0000000077226133  call        0000000077231650  
0000000077226138  mov         dword ptr [rsp+30h],eax  
000000007722613C  test        eax,eax  
000000007722613E  js          000000007725E73F  
0000000077226144  cmp         dword ptr [7731201Ch],r14d  
000000007722614B  je          0000000077226129  

有人可以告诉我或至少指出如何解决这个问题吗?

编辑:我发现当删除一个共享库(Point Gray Research 开发的 FlyCapture2)时,应用程序正常启动。似乎该库具有某种加载程序,该程序在执行 main() 之前调用。即使我解决了当前的问题,我仍然想知道:如何检测此类问题?

4

2 回答 2

1

我想我找到了问题所在。在我的一个 DLL 中,我有一个单例类。在头文件中,我有一个 getter LogManager::instance()和一个销毁器void LogManager::destroyInstance()。该实例是在 .cpp 文件中定义的,但不是静态的,而是作为全局变量

LogManager* sInstance = new LogManager;

instance()函数只是返回了该变量,而destroyInstance()函数将其删除。所以我删除了全局变量并在instance()函数中创建了该实例

void LogManager::instance()
{
    static LogManager*  sInstance = 0;
        if(!sInstance)
            sInstance = new LogManager;
    return sInstance;
}

问题就消失了。所以我认为也许该DLL中的全局变量在加载该DLL期间导致了无限循环?也许这对有类似问题的人来说是一个提示。

于 2015-04-08T01:18:22.013 回答
0

如何正确连接DLL是一个大问题。它在应用程序之前所以我们很难找到它并解决它。但是当我有关于DLL的问题时,我也会在互联网上寻找答案.而且每个错误都有自己的序列号。这是关键。它还在“错误列表”中显示“LNK**** ........”。所以我可以找到它,甚至可以通过我自己根据别人的信息。

PS:您的代码称为“机器指令”。它是计算机原理的一部分。

于 2015-04-13T10:45:50.410 回答