我有一个很奇怪的问题。我们的公司应用程序是一个用C++编写的桌面应用程序,并使用Visual Studio 2017进行编译。在过去的几个星期里,有时应用程序在进入main之前会崩溃。我知道这一点,因为我在main的第一行放置了断点,并且它永远不会被调用。碰撞不会很快发生,所以我有时间在诊断工具中全部按下休息。但是我只收到一条消息'你的应用程序已进入休息状态,但没有代码显示,因为所有线程都在执行外部代码(通常是系统或框架代码)“。有时清理所有东西并重建会使代码正常工作,但有时候不会。在进入main之前程序崩溃时该怎么办?
我甚至不知道如何开始调查此问题,代码已有几年的历史,并且从未遇到过这个问题。
不知道该怎么办?
编辑
至于建议,我在WinMainCRTStartup设置断点,我跟踪这个问题到线224功能__scrt_common_main_seh()在exe_common.inl:
如果(_initterm_e(__ xi_a,__xi_z)= 0) return 255;
该行失败,所以该函数返回255,我的主永远不会被调用。还有什么想法?
*任何*崩溃通常要做的就是在调试器中捕捉它,并找到它发生的代码的位置。如果它不是源自你的代码,那么你应该在'main'函数中寻找大数组,因为Windows每个进程只有一个默认的一兆字节的堆栈,并且在'main'之前似乎崩溃了,通常是你有一个符号由于存在多个或大型局部变量(局部变量,包括数组),导致堆栈溢出通常存储在堆栈中。 –
如果你不*有任何大型数组,那么调试器应该已经捕捉到了崩溃,并且很可能指出了一些全局变量的初始化。 –
我会检查的一个选项是一些缺失的依赖关系。如果您拥有所有依赖的dll验证工作目录是否设置正确 – Dusteh