我不会写C,但是得用到C写的东西。比如最近的一个测试任务中,需要使用python来调用一个so,很自然就要使用ctypes模块。但是在测试的过程中,发现不定期会出现segmentation fault的情况,此时调用so的python脚本也会退出。这种段错误,python无法使用try来捕获,一旦发生,直接就会让python程序崩溃。由于源程序的崩溃只是随机的发生,找不到什么固定的规律,为了测试该问题,我只好自己在网上找点资料来写个测试的so文件,每次都产生segmentation fault的情况,以测试好的解决方案。
1 | int fault(void) |
把以上代码保存命名为segfault.c,在命令行下编译为so
gcc -fPIC -shared -o ./segfault.so segfault.c
python代码中使用ctypes来引用这个so
1 | import ctypes |
运行这个python脚本后即可出现
Segmentation fault
经过测试,似乎没有什么好的法子来解决这个段错误导致python程序崩溃的问题,于是到后来自己又用subprocess来调用了一次python脚本,防止主程序的崩溃。如果各位有什么好的方案,恳请不吝赐教……