c++ - 当你的程序在进入 main 之前崩溃了怎么办?

标签 c++ windows visual-studio

我有一个很奇怪的问题。我们公司的应用程序是一个用 C++ 编写并使用 Visual Studio 2017 编译的桌面应用程序。在过去的几周里,有时应用程序会在进入 main 之前崩溃。我知道它是因为我将断点放在 main 的第一行并且它永远不会被调用。崩溃不会很快发生,所以我有时间在诊断工具中按下 break all。但我只收到一条消息“您的应用程序已进入中断状态,但没有代码可显示,因为所有线程都在执行外部代码(通常是系统或框架代码)”。有时清理一切并进行重建会使代码正常工作,但有时却不行。

我什至不知道如何开始调查这个,代码已经有好几年了,从来没有遇到过这个问题。

知道要做什么吗?

编辑

按照建议,我在 WinMainCRTStartup 中设置了断点,并将问题追踪到 exe_common.inl 中的第 224 行函数 __scrt_common_main_seh():

如果 (_initterm_e(__xi_a, __xi_z) != 0) 返回 255;

该行失败,因此该函数返回 255,而我的 main 函数从未被调用。还有什么想法吗?

最佳答案

我终于让我的程序重新运行了。原因是程序现在是使用 Visual Studio 2017 编译的,但是一些与我的程序静态链接的库是使用以前的 visual studio 构建的,在我使用 Visual Studio 2017 重新编译它们之后我的程序运行得很好。

因此,如果您的程序在退出之前崩溃,要检查的一件事是确保您的所有库都是使用相同的编译器和相同的编译器开关构建的。

关于c++ - 当你的程序在进入 main 之前崩溃了怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45875802/

相关文章:

c++ - 调用函数并使用 goto : memory leak? 将其转义

c++ - 在 C++ 中修复类型转换警告的最佳方法

asp.net - Visual Studio 2012 - 数据库发布向导已停止?

c++ - 对 DLL 中的非导出类进行单元测试

c++ - 正确使用 AddClipboardFormatListener 并订阅 WM_CLIPBOARDUPDATE 消息

c++ - 删除字符串中连续的重复值

c++ - 错误的十六进制代码

c++ - Win32 : How to hide 3rd party windows in taskbar by hWnd

c++ - 适用于 Windows 的最完整、最可靠的开源 C++11 IDE 是什么?

C++ | LNK1104 - 无法打开文件 kernel32.lib