c# C -使用valgrind检测我的criterion单元测试中的内存泄漏和上下文错误

iyfjxgzm  于 2023-04-04  发布在  C#
关注(0)|答案(1)|浏览(156)

我正在尝试为我制作的C库编写单元测试。
为此,我使用了库criterion
我想使用valgrind来检测内存泄漏和上下文错误,当我运行make test时,它会生成一个unit_test.o文件,我可以运行throw valgrind,结果如下:

test: clean $(TEST_OBJ)
    $(CC) -o ${TEST_NAME} ${SRC} $(TEST_SRC) --coverage -lcriterion
    ./${TEST_NAME}

正如你所看到的,我有0个泄漏和0个上下文错误,这是不正确的,因为测试的代码包含这两个。如果我在main函数中运行相同的代码,它将检测泄漏和上下文。
看起来criterion在一种“安全”的上下文中执行unit_tests并释放所有内存。
我的问题是如何从我的标准单元测试中测试泄漏和上下文?或者,有什么替代方法来测试它?

23c0lvtd

23c0lvtd1#

您必须查看Criterion的文档-但是默认模式在单独的进程中启动测试的可能性很高。

  • [... Time passeth...]* Snaipe/Criterion单元测试框架的源代码可在GitHub上获得(在https://github.com/Snaipe/Criterion),主页上声称的功能之一是“Test [sic]在自己的进程中被隔离,崩溃和信号可以被报告和测试”。

但是,Valgrind有一些选项可以提供帮助,特别是:

  • --trace-children=no|yes Valgrind-ise子进程(遵循execve)?[否]。
  • --trace-children-skip=patt1,patt2,...指定--trace-children=yes不应跟踪的可执行文件列表。
  • --trace-children-skip-by-arg=patt1,patt2,...--trace-children-skip=相同,但检查子项的argv[]条目,而不是exe名称,以做出跟随/不跟随决定。

--trace-children=yes设置为Valgrind的选项应该会对您有所帮助。

相关问题