在某些情况下,使用std :: set_terminate无法捕获C ++纯虚函数调用吗?

永久性

在Linux服务器上运行的可执行文件的深处,有一个C ++纯虚拟函数调用。这会导致服务器崩溃,不留下程序跟踪数据,堆栈跟踪和核心转储。仅保留一些日志文件。几乎可以肯定,这是由一生的问题引起的,我很清楚发生的地方,但我想证明一下。我试图通过使用std::set_terminate设置将在调用终止时运行的处理程序来纠正这种情况这在测试中有效。例如,如果我引起一个纯虚拟呼叫,请使用:

class Base {
public:
    Base() {}
    virtual ~Base(){}
    virtual void foo() = 0;
};

class Derived: public Base {
public:
    Derived(): n_(0) {}
    ~Derived(){}
    void foo() {
            n_ = 1;
    }
private:
    int n_;
};              

接着

Base* p = new Derived();
Base* p1 = p;
p->~Base();
p1->foo();

处理程序工作并生成跟踪数据,堆栈跟踪和核心转储。运行系统打印

纯虚拟方法称为

对于这个测试。

set_terminate代码中没有其他调用该测试是在服务器启动并运行时完成的,因此如果可能的话,任何后续的调用都可能已经使我的处理程序陷入混乱。然而,在实际的服务器,这并没有赶上纯虚拟呼叫。我能想到的唯一情况可能会导致这是在我的调用之后设置终止处理程序。还有什么其他方法可以避免我的终止处理程序?

重复数据删除器

实际上,如果您具有Undefined Behavior,则对执行环境或编译的二进制文件的任何更改都可能导致您的代码以其他方式出现异常。

在更改了优化和调试标志的情况下,这一点尤其明显,但是似乎无害的代码更改也被预定义为触发此操作。

接下来,您的错误是否可能是heisenbug,即与计时/多线程相关?

此外,如果在构造/销毁过程中不需要虚拟表并且实际上没有创建过确切类型的对象,则编译器可能会完全省略虚拟表。
因此,即使析构函数已运行,您对的调用也foo可能同样崩溃或调用derived::foo

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++纯虚函数调用的性能差异

来自分类Dev

C ++ 11线程,错误调用了纯虚函数

来自分类Dev

使用b2FixtureDef的box2d CreateFixture提供了纯虚函数调用

来自分类Dev

D中的C ++ DLL(纯虚函数)

来自分类Dev

奇怪的行为C ++纯虚函数

来自分类Dev

C ++如何在没有std :: function的情况下声明函数返回函数?

来自分类Dev

如何将C ++类转换为托管类并在其中调用纯虚函数?

来自分类Dev

纯虚函数调用有趣的情况

来自分类Dev

使用纯虚函数定义在C ++类之外?

来自分类Dev

从operator <<调用纯虚函数

来自分类Dev

C ++:从同一类的成员函数调用纯虚函数

来自分类Dev

K&R练习6-1在某些情况下,getword函数无法读取EOF

来自分类Dev

C语言-在某些情况下,我可以使用char在数字旁边切换吗?

来自分类Dev

在某些情况下无法替换Javascript

来自分类Dev

D中的C ++ DLL(纯虚函数)

来自分类Dev

C ++ 11中的纯虚函数

来自分类Dev

在不使用外部“ C”的情况下从C调用C ++函数

来自分类Dev

奇怪的行为C ++纯虚函数

来自分类Dev

关于纯虚函数的C ++设计原理?

来自分类Dev

C ++:通过调用纯虚函数避免重复

来自分类Dev

C ++如何在没有std :: function的情况下声明函数返回函数?

来自分类Dev

使用纯虚函数在C ++类之外定义?

来自分类Dev

从operator <<调用纯虚函数

来自分类Dev

使用Boost :: Python包装纯虚函数

来自分类Dev

使用虚函数的C ++

来自分类Dev

Excel日期错误:Excel无法识别为日期;使用Date =函数会增加2年,但仅在某些情况下

来自分类Dev

为什么在某些情况下原型函数无法解决“这个”问题?

来自分类Dev

C ++在实现的纯虚方法中自动从父抽象类调用检查方法吗?

来自分类Dev

在不停止代码的情况下使用 read() C 函数

Related 相关文章

  1. 1

    C ++纯虚函数调用的性能差异

  2. 2

    C ++ 11线程,错误调用了纯虚函数

  3. 3

    使用b2FixtureDef的box2d CreateFixture提供了纯虚函数调用

  4. 4

    D中的C ++ DLL(纯虚函数)

  5. 5

    奇怪的行为C ++纯虚函数

  6. 6

    C ++如何在没有std :: function的情况下声明函数返回函数?

  7. 7

    如何将C ++类转换为托管类并在其中调用纯虚函数?

  8. 8

    纯虚函数调用有趣的情况

  9. 9

    使用纯虚函数定义在C ++类之外?

  10. 10

    从operator <<调用纯虚函数

  11. 11

    C ++:从同一类的成员函数调用纯虚函数

  12. 12

    K&R练习6-1在某些情况下,getword函数无法读取EOF

  13. 13

    C语言-在某些情况下,我可以使用char在数字旁边切换吗?

  14. 14

    在某些情况下无法替换Javascript

  15. 15

    D中的C ++ DLL(纯虚函数)

  16. 16

    C ++ 11中的纯虚函数

  17. 17

    在不使用外部“ C”的情况下从C调用C ++函数

  18. 18

    奇怪的行为C ++纯虚函数

  19. 19

    关于纯虚函数的C ++设计原理?

  20. 20

    C ++:通过调用纯虚函数避免重复

  21. 21

    C ++如何在没有std :: function的情况下声明函数返回函数?

  22. 22

    使用纯虚函数在C ++类之外定义?

  23. 23

    从operator <<调用纯虚函数

  24. 24

    使用Boost :: Python包装纯虚函数

  25. 25

    使用虚函数的C ++

  26. 26

    Excel日期错误:Excel无法识别为日期;使用Date =函数会增加2年,但仅在某些情况下

  27. 27

    为什么在某些情况下原型函数无法解决“这个”问题?

  28. 28

    C ++在实现的纯虚方法中自动从父抽象类调用检查方法吗?

  29. 29

    在不停止代码的情况下使用 read() C 函数

热门标签

归档