编写预期存在段错误的Rust测试

时间:2019-03-15 14:11:21

标签: unit-testing rust segmentation-fault

我想在Rust中编写一个测试,其中#[test]函数的预期行为是段错误。这可能吗?

2 个答案:

答案 0 :(得分:3)

首先,我想指出,我知道的唯一一种确定段错误的可靠方法是将SIGSEGV信号发送到自己的进程,可能使用“ raise”功能或等效的rust。

取消引用指向未分配内存的指针或空指针实际上并不能保证segfault,尽管在大多数现代平台上都是如此。

检查段错误的最简单方法是派生程序(可能使用nix crate)。完成后,在父进程等待时执行应该使您对子进程进行段错误的功能。

等待足够长的时间后(超过几百毫秒是多余的),请检查子线程是否已死。为此,只需杀死它,如果它已经死了,就应该引发错误。

答案 1 :(得分:1)

在我看来,唯一正确的测试方法是沉重的。在测试中,我将运行一个静态分析器,该分析器可以检测到这种可能的未定义行为,并验证是否仍然存在此问题。

但是,我不知道Rust板条箱会进行静态分析,所以我想您将依赖于使用C ABI的extern工具。