我正在尝试为我制作的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并释放所有内存。
我的问题是如何从我的标准单元测试中测试泄漏和上下文?或者,有什么替代方法来测试它?
1条答案
按热度按时间23c0lvtd1#
您必须查看Criterion的文档-但是默认模式在单独的进程中启动测试的可能性很高。
但是,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的选项应该会对您有所帮助。