我用c ++编写了一个大项目,当我在调试或发布模式下打开它时运行,但是当我打开它而没有调试(ctrl + f5)时它会在5秒后崩溃。它只是不再回复,并在taskmanager中被标记为非活动状态。我尝试用Windows调试器工具和应用程序verfier分析错误,但我什么都没发现。即使我设置" _NO_DEBUG_HEAP = 1",错误也不会发生,只是当我用ctrl + f5启动它或者从visual studio开始时。我甚至不确定_NO_DEBUG_HEAP是否有效......任何人都知道可能出现什么问题?
答案 0 :(得分:0)
任何事情都可能导致这种情况。
根据我的经验,我建议通过删除代码来解决这个问题直到行为消失...然后确定删除相关代码的原因纠正了行为。 (删除的代码可能不是原因,只是症状的催化剂)
如果我的任务是快速浏览一下发现错误,我会考虑寻找与缓冲区溢出相关的问题。与执行最终构建相比,此类错误在调试中具有更多安全措施。基于缓冲区溢出是一个有点适合症状的常见问题,这只是黑暗中的刺伤。
-dm
答案 1 :(得分:0)
要检查的常见事项:
你确定你的应用程序正在设置任何用于零的内存, 如果它假设存储器必须归零?
Visual Studio可能正在初始化给予的内存 应用
是否已释放所有已分配的内存?
没有使用未初始化的指针?
没有使用未初始化的变量?
64 bit exe crashing outside visual studio but working inside visual studio
问题只发生在一台计算机上吗?
您可以使用check_heap检查堆的有效性 在该计划中:
Program crashes only in Release mode outside debugger
您可以使用Windows调试工具来显示堆 腐败 - 有一个名为“gflags”的工具随附 Microsoft“Windows独立调试工具”
https://msdn.microsoft.com/en-us/windows/hardware/hh852365
此URL显示如何针对您的.EXE运行gflags:
Visual Studio - how to find source of heap corruption errors