用于测试生成segmentation fault的C代码

我不会写C,但是得用到C写的东西。比如最近的一个测试任务中,需要使用python来调用一个so,很自然就要使用ctypes模块。但是在测试的过程中,发现不定期会出现segmentation fault的情况,此时调用so的python脚本也会退出。这种段错误,python无法使用try来捕获,一旦发生,直接就会让python程序崩溃。由于源程序的崩溃只是随机的发生,找不到什么固定的规律,为了测试该问题,我只好自己在网上找点资料来写个测试的so文件,每次都产生segmentation fault的情况,以测试好的解决方案。

int fault(void)
{
    char *s = "hello world";
    *s = 'H';
}

把以上代码保存命名为segfault.c,在命令行下编译为so

gcc -fPIC -shared -o ./segfault.so segfault.c

python代码中使用ctypes来引用这个so

import ctypes
lib = ctypes.cdll.LoadLibrary('./segfault.so')
lib.fault()

运行这个python脚本后即可出现

Segmentation fault

经过测试,似乎没有什么好的法子来解决这个段错误导致python程序崩溃的问题,于是到后来自己又用subprocess来调用了一次python脚本,防止主程序的崩溃。如果各位有什么好的方案,恳请不吝赐教……

评论