编写一个期望段错误的Rust测试

问题描述 投票:0回答:2

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

unit-testing rust segmentation-fault
2个回答
3
投票

首先,我想指出,我所知道的唯一可靠的段错误方法是将SIGSEGV信号发送到您自己的进程,可能使用“raise”函数或锈蚀等效函数。

取消引用指向未分配内存或空指针的指针实际上并不能保证段错误,尽管它将在大多数现代平台上使用。

检查段错误的最简单方法是分叉程序(可能使用nix crate)。完成后,执行应该使您在子进程上出现段错误的函数,同时父进程等待。

等待足够长的时间(任何超过几百毫秒的过度杀伤)后,检查子线程是否已经死亡。要做到这一点,只需杀死它,如果它已经死了就应该引发错误。


1
投票

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

我不知道做一个静态分析的Rust箱子,所以我猜你会依赖于使用C ABI的外部工具。

© www.soinside.com 2019 - 2024. All rights reserved.