gpt4 book ai didi

visual-studio-2010 - 在 Visual Studio 2010 中调试时无限循环

转载 作者:行者123 更新时间:2023-12-04 12:55:27 25 4
gpt4 key购买 nike

我对 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 Grey Research 开发的FlyCapture2)时,应用程序正常启动。似乎库有某种加载路由,它在执行 main() 之前被调用。即使我解决了我目前的问题,我仍然想知道:如何检测此类问题?

最佳答案

我想我发现了问题。
在我的一个 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 期间导致了无限循环?
也许这对有类似问题的人来说是一个提示。

关于visual-studio-2010 - 在 Visual Studio 2010 中调试时无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12395519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com