SEH例外,代码0xc0000005在测试主体中投入

SEH exception with code 0xc0000005 thrown in the test body

本文关键字:主体 测试 例外 代码 0xc0000005 SEH      更新时间:2023-10-16

我正在使用googletest为以下类编写测试,我会遇到上述错误。

class Base
{
    // Other Functions;
    CSig objSig[50];
}

csig类如下:

class CSig
{
    //... constructor, destructor(empty) and some functions
    CMod *objMod;
    CDemod *objDemod;
}
CSig :: CSig
{
    bIsInitialised = false;
    for (int i=0; i<MAX_NUM; i++)
    {
        PStrokePrev[i] = 0.0;
    }
}

但是,当我丢弃CSig objSig[50]时,测试正常。

我该怎么办来解决这个问题?另外,我需要在基类中拥有CSig objSig[50]

seh(结构化异常处理)异常不是C - 可以使用C - 语言构造(try-catch)处理的C 异常基本缺陷。SEH的外观非常烦人,因为它们不会引起正常的堆栈放松,这可能会导致未锁定的文件或未锁定的静音,而这些静音通常应该由拥有对象的破坏者清除。当访问不属于当前过程的内存时,我遇到了SEH检验,因此我建议查看CSIG的构造函数和破坏者中的内存相关指令。例如,您可以阅读有关SEH的信息,例如,这里

我刚刚发现的问题是,在Visual Studio中,我去了Debug-> exceptions,并检查了第一列中的所有内容。然后运行/调试您的单元测试,并且会在问题所在的线上抛出一个例外。那是您需要调试/修复它的地方。

我使用Visual Studio 2010的Googletest遇到了这个问题。我们的设置涉及为Googletest Frameworks创建库,然后将其与我们的单个单元测试链接。我最近更新了框架支持并从头开始重新编译。执行此操作后,我遇到了上述例外。

经过一番挖掘,我发现"结构成员对齐"设置为罪魁祸首:

项目属性>配置属性> C/C >代码生成>结构成员对齐

当Frameworks项目设置为"默认值"时,相应的单元测试项目将其配置为" 1字节/ZP1"。一旦我更改了它们以进行相同的对齐,问题就消失了。

对我而言,它似乎是一个零参考错误。某种方法被调用了NULLPTR,出于我不清楚的原因,它并没有立即失败,而是开始执行。SEH错误大概是在访问未分配的内存后立即发生的。因此,请检查无效指针!

我遇到了类似的问题,它与非命令变量有关,并在发行版中运行测试。我有一个非定位化的char *之后,将其初始化为null似乎已经解决了问题。

如果您使用的是Visual Studio 2013,请在调试中查看Win32异常(特别是访问违规)的抛弃框。这将让您调试哪个行有问题。这可能很有用,因为如果您的程序通常提出其他例外,调试器将不会破坏。

破坏零指针可能是原因。我通过Visual Studio&GT;异常全选。然后运行本地Windows调试器,它停在发生例外的线上。

使用QT中的MSVC陷入了此问题。SEH几乎是随机抛出的,没有明显的原因原因。(读:没有时间来研究它)在找不到正确的解决方案并且测试似乎适用于非窗口用户之后,我切换到MINGW正常进行测试。

我试图删除已删除的内存地址。在我的情况下,这是问题,所以我建议寻找无效指针。

我在VS上使用gtest与Protobuf一起使用,我看到了检查测试的检查(调试)构建崩溃的问题,但没有免费(Release)构建。p>要使用Protobuf,我在此处遵循说明,尤其是Windows的VCPKG安装。

事实证明,GTEST项目是从父母那里继承了LIBS,最终与Libprotobuf和libprotobuf_lite链接在一起,而不是Libprotobufd和libprotobuf_lited,后者是DEBUG版本。这是因为默认情况下,在属性下的其他依赖关系中的路径 - libs居住。

将路径更改为$(_ zvcpkgcurrentinstalleddir)$(_ zvcpkggconfigsubdir)debug lib*.lib解决了问题,例外消失了。