gpt4 book ai didi

c++ - Valgrind用 “pure virtual method called”中止程序很久之前

转载 作者:行者123 更新时间:2023-12-01 14:42:22 26 4
gpt4 key购买 nike

我正在尝试查找运行单元测试时导致段错误的原因。
当我通过gdb运行它时,该程序将完成所涉及的测试块,然后引发带有消息“已损坏的双向链接列表”的SIGABORT。从回溯中,我确定问题出在全局ProtocolType对象的析构函数中。
因此,我通过valgrind运行程序,发生了两件事:第一,我收到大量错误;第二,我收到了很多错误。太多手动选择。其次,它给了我不同的终止消息。 Valgrind仅在第二个测试用例中显示出“调用的纯虚拟方法”。
我可以肯定这与我的第一个错误的原因不同,因为ProtocolType类不使用任何虚拟方法,并且不是任何其他类的父级或子级。
有没有一种方法可以抑制“纯虚拟方法调用”异常,以便valgrind可以到达发生错误的位置?或者我可以根据valgrind的异常生成回溯,以便解决该问题?

最佳答案

您正在考虑完全倒退。您在发行代码中看到的错误是较早发生的损坏的受害者。您无法解决受害者的问题,您需要查看肇事者。因此,开始浏览这些消息。
您可能是对的,其中许多是虚假的。如果是这样,您将快速将它们筛选成类别。但是,甚至可能您正在调用一些破损的代码,这些代码经常以无害的方式发生故障。例如,如果您有一个错误访问数组超出边界一个字节的错误,而该数组通常为10个字节,那可能是无害的,因为您的分配器可能分配了16个字节。但是,如果数组大小为16个字节,则...
从头开始。您不想尝试解决执行环境已损坏很长时间之后可能发生的问题。
由于这些是单元测试,因此,如果仅可以运行该单元测试,则可以分别调试每个单元测试。然后,您知道每个测试都始于一个干净的环境。但不要在执行运行的早期忽略任何警告或错误。

关于c++ - Valgrind用 “pure virtual method called”中止程序很久之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63141925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com