Я хотел бы использовать библиотеку быстрой проверки Haskell для тестирования кода C. Кажется, самый простой способ сделать foreign import
и написать свойство поверх полученной функции haskell. Проблема в том, что если код C вызывает segfault или ему удается повредить память, мои тесты либо завершаются сбоем без вывода, либо делают что-то совершенно непредсказуемое.
Второй вариант — сделать простые исполняемые обёртки над C-битами и выполнять их вне процесса тестирования через System.Process
. Излишне говорить, что для этого требуется много строительных лесов и сериализации значений, но, с другой стороны, он может обрабатывать ошибки сегментации.
Есть ли способ сделать стратегию foreign import
такой же безопасной, как запуск внешнего процесса?
System.Posix.Process.forkProcess
, и запрограммировать связь с помощью Haskell. - person Joachim Breitner   schedule 08.08.2014getcontext
перед входом в настоящую функцию C, а при ошибке переверните флаг и выполнитеsetcontext
, чтобы вернуться туда, где выgetcontext
ed. Если флаг все еще в исходном состоянии, все прошло нормально. Возможно, в сочетании с чем-то вроде cs.rutgers.edu/~santosh.nagarakatte/softbound для некритических ошибок. [1]:libsigsegv — это GPL, но вы не выпускаете свои тесты — или выпускаете? ;-) Если это проблема, у меня есть более простой код, который я могу выпустить. - person nobody   schedule 19.09.2014