在 GMock API GetValueAndDelete() 中获取分段错误
get Segmentation fault in GMock API GetValueAndDelete()
我在使用 gmock 时遇到一个奇怪的问题,一个线程在GetValueAndDelete()
中出现分段错误,检查 gmock 代码,这个函数很简单:
template <>
class ActionResultHolder<void> : public UntypedActionResultHolderBase {
public:
void GetValueAndDelete() const { delete this; }
......
分段会怎么出错?
stack info
Program received signal SIGSEGV, Segmentation fault.
0x000000000049c0da in testing::internal::ActionResultHolder<void>::GetValueAndDelete() const ()
(gdb) bt
#0 0x000000000049c0da in testing::internal::ActionResultHolder<void>::GetValueAndDelete() const ()
#1 0x000000000049c194 in TestServerPolicyMock::start_accept(std::error_code&) ()
正如SoronelHaetil提到的,你的帖子不够准确,无法给出答案,所以我会尝试给你一些可能的解决方案。
您在使用 GMock 时面临的问题可能由于以下几个原因而出现:
-
GMock 尝试访问的对象已被删除或销毁,在这种情况下,可能会引发分段错误。
-
正如您提到的,有一个特定的线程抛出此分段错误,另一个原因可能是在尝试使用 GMock 和 GDB 时,可能是GDB本身在尝试启动多个线程时无法找到合适的库,在启动时出现下一条消息:
warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.
如果是这种情况,请尝试使用以下命令来设置 sysroot 或帮助 gdb 找到正确的库:"setsolib-search-path">或">set sysroot"。在尝试添加命令 bt之前执行此操作。
-
就我而言,使用void() 返回方法让我在尝试将其与 GMock 集成时有点痛苦,特别是在为ARM编译时。当为返回 void() 分段的方法设置期望时,总是会抛出错误,就像您的情况一样。 但是,我真的不知道为什么,我认为应该在某处报告,当将返回类型更改为bool(或任何其他类型)时,一切都为我解决了。
相关文章:
- 获取未知分段错误"(地址)在 std::__cxx11::basic_string<char, std::char_traits<char>,..., std::分配器<cha
- C++ .我正在尝试通过使用开关内的数组来获取用户输入,但是当我运行代码时,它显示分段错误?
- 在编写代码以查找数组中的对数时获取分段错误
- 获取分段错误(代码在 c++ 中转储
- 获取分段错误,用于在 protobuffer 的 C++ 中实现 ByteSize()
- 尝试从另一个类对象获取值时出现分段错误
- 在 GMock API GetValueAndDelete() 中获取分段错误
- 使用 getline 函数获取分段错误
- 读取文件夹中的文件列表时获取分段折叠
- 制作链表:获取分段错误
- 在C++中生成一组整数的排列.获取分段错误
- 将中缀转换为后缀并获取分段错误核心转储错误
- 在终端中获取分段故障11错误
- 使用TinyXML获取分段错误
- 在 QFile::set文件名上获取分段错误
- 斯特托克获取分段错误读取文件
- 使用pthreads在c++中获取分段错误
- c++使用std::set并获取分段故障D:
- 获取"分段错误:尝试将字符串写入 setter 时核心转储
- 指向矢量的指针:获取分段错误