Vio*_*nev 7 debugging infinite-loop visual-studio-2010
我对VS2010有一个奇怪的问题(构建一个大的C++项目).在开始调试时,执行就像无限循环一样.我将断点放在main()的第一行,但是从未到达断点.我也试过F11进入main(),但没有效果.任务管理器显示我的应用程序的一个实例,控制台只显示"xxx.dll符号已加载".我试图暂停执行,但我被抛入一些汇编循环,如果有人可以阅读它,这里是汇编:
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
Run Code Online (Sandbox Code Playgroud)
有人能告诉我或者至少指出我如何处理这个问题?
编辑:我发现当删除其中一个共享库(Point Grey Research开发的FlyCapture2)时,应用程序正常启动.似乎库有某种加载例程,在执行main()之前调用它.即使我解决了当前的问题,我仍然想知道:如何检测这类问题?
我想我发现了问题。在我的一个 DLL 中,我有一个单例类。在头文件中,我有一个 getter LogManager::instance()和一个 destroyer void LogManager::destroyInstance()。该实例是在 .cpp 文件中定义的,但不是静态定义的,而是作为全局变量
LogManager* sInstance = new LogManager;
Run Code Online (Sandbox Code Playgroud)
instance ()函数只是返回该变量,destroyInstance()函数将其删除。所以我删除了全局变量并在instance()函数中创建了该实例
void LogManager::instance()
{
static LogManager* sInstance = 0;
if(!sInstance)
sInstance = new LogManager;
return sInstance;
}
Run Code Online (Sandbox Code Playgroud)
问题就消失了。所以我想也许该 DLL 中的全局变量在加载该 DLL 期间导致了无限循环?也许这对有类似问题的人来说是一个提示。
| 归档时间: |
|
| 查看次数: |
1101 次 |
| 最近记录: |