运行时 Visual C++ 10 中的奇怪异常

Posted

技术标签:

【中文标题】运行时 Visual C++ 10 中的奇怪异常【英文标题】:curious exception in Visual C++ 10 at runtime 【发布时间】:2011-06-05 08:09:43 【问题描述】:

今天我在运行时遇到了非常奇怪的异常。我尝试一步步调试,但是在调用main()之前出现异常。

所以我删除了每个包含和整个代码(注释它),并添加了一个空的main() 函数。

再次,在编译后发生。可能是项目配置错误?

顺便说一句:在异常发生后,VC10 调试器转到 strlen.asm 并显示空指针。

VS10 解决方案有 2 个项目,第二个工作得很好,第一个也很好,但是在我编译第二个项目后,它停止工作了。

项目具有相同的二进制文件输出,但它们为每个项目的 obj 等文件提供了一个额外的输出文件夹。

那么,那里发生了什么?

【问题讨论】:

有全局变量吗?他们的 c'tor 可能会导致异常 下次请忽略 WTF。 【参考方案1】:

问题很可能是全局或静态对象初始化的一部分,然后使用空指针调用strlen。您在任何 .cpp 中是否有任何全局变量?或者某些类中的任何静态?

请注意,即使您从 main.cpp 中删除所有内容,其他 .cpp 文件仍然会被编译并导致错误。

【讨论】:

非常感谢,我明白了,我在一个类中有一个静态std::string。【参考方案2】:

没有任何细节,很难说清楚,所以我只能根据我的两次类似经历分享建议。它不在 Visual Studio 中,但您可能碰巧遇到了同样的问题。

    您可能需要一个不在运行调试版本的路径中的动态加载组件(dll、ocx 等)。

    您可能有不当的全局初始化

【讨论】:

以上是关于运行时 Visual C++ 10 中的奇怪异常的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2008 发布版本上的 c++ 应用程序出现未处理异常 - 从函数返回时发生

无法在 Visual Studio 2017 (Native c++) 中禁用数据断点

Visual Studio 2005 C++ 运行时新异常

Visual Studio 奇怪的异常

std::thread,在线程中抛出异常会导致 Visual C++ 中的中止错误

Visual Studio for Mac 上的奇怪 linq 异常