调用mockcpp打桩的函数报错Program received signal SIGSEGV, Segmentation fault.

写C++UT时,调用一个打桩了的函数就会报错

#include
#include "gtest/gtest.h"
#include "mockcpp/mockcpp.hpp"

在尝试调用的时候就会报错

int add(int input)
{
    return input;
}

TEST(commFunTest,NoMock)
{
    int a = 1;
    ASSERT_EQ(1, add(a));
}

TEST(commFunTest,Mock)
{
    MOCKER(add).stubs().will(returnValue((int)3));
    int a = 1;
    ASSERT_EQ(2, add(a));
}

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()

望采纳!!点击该回答右侧的“采纳”按钮即可采纳!!
我猜测这个错误的原因可能是由于在调用打桩了的函数时没有正确调用 mockcpp 库。


在使用 mockcpp 库时,需要确保 mockcpp 库已经正确安装,并在编译时正确链接 mockcpp 库。这可以通过在编译命令中加入 mockcpp 的库文件路径和库文件名称来实现。

例如,你可以使用以下命令来编译和链接你的程序:

g++ -o test main.cpp -lmockcpp

另外,你还可以尝试检查 mockcpp 库的安装是否正确,以及你的程序中是否有拼写或引用 mockcpp 库的错误。


此外,你也可以尝试在程序中添加调试信息,以帮助你找出问题的具体原因。例如,你可以使用 cout 语句来输出变量的值或函数的返回结果,以帮助你更好地理解程序的执行流程和调用关系。

调试中出现Program received signal SIGSEGV,Segmentation fault原因及解决办法
借鉴下
https://www.jianshu.com/p/85f043c43130

报错主要原因是访问到了系统没分配的地方出的错,未初始化或越界。

可以参考实例【Linux环境下段错误的产生原因及调试方法小结】,链接:https://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html
实例中详细讲解了产生的原因、分析的过程、解决的办法

这可能是因为你在调用mockcpp打桩的函数时,传入了一个无效的指针或者在调用函数时访问了不可访问的内存区域,导致程序崩溃。你需要检查你的代码是否存在这种情况,并修复相关的问题。

这个错误的原因可能是在使用了打桩库 mockcpp 的时候,在调用 add 函数时没有按照 mockcpp 的规就去调用它。

在使用 mockcpp 的时候,如果想要对 add 函数进行打桩,应该使用 mockcpp 提供的宏 MOCKER 来代替 add 函数,例如:

int add(int input)
{
    return MOCKER(add)(input);
}

这样在调用 add 函数的时候,mockcpp 就会拦截这个调用并且进行打桩。

另外在第二个测试用例(TEST(commFunTest,Mock))中,使用了 MOCKER(add).stubs().will(returnValue((int)3)) 来对 add 函数进行打桩,但是期望调用 add 函数后的结果为 2(ASSERT_EQ(2, add(a))),这个期望值是不正确的,因为已经对 add 函数进行了打桩,它的返回值已经被设定为 3(returnValue((int)3)),所以应该将期望值修改为 3:

ASSERT_EQ(3, add(a));

如果还是遇到了调用 add 函数时报错的情况,那么可能是 mockcpp 的使用出现了问题,可以试试检查一下 mockcpp 的版本是否正确,以及编译器是否支持 mockcpp。
望采纳。

原因可能是

1.函数的打桩有问题:使用 mockcpp 库打桩函数时,可能存在打桩的方法不正确的情况,导致函数调用时发生错误。
2.内存访问出错:调用打桩函数时,如果函数的参数或返回值指向的内存地址无效,可能会导致程序崩溃。
3.其他原因:还可能是其他原因导致的程序崩溃,比如编译器版本问题、操作系统版本问题等。

可以尝试以下方法:

1.检查打桩函数的代码,确保打桩方法正确。
2.在调用打桩函数时,检查函数的参数和返回值是否有效。
3.尝试升级编译器版本或操作系统版本,看看能否解决问题。
4.尝试在调用打桩函数前使用调试工具(如 gdb)跟踪程序运行,看看是否能找到问题的根源。