我称之为在许多地方使用断言的c库。这对我来说是一个问题,因为我不希望我的应用程序在断言失败时终止。
设置标志以禁用断言无济于事,因为它只会导致一个 segfault。NDEBUG
这是我到目前为止所得到的,但SIGTERM没有被抓住。
// Redefine the MPE_Assert macro to use SIGTERM since SIGABRT cannot be stopped.
// #include <signal.h>
// #define MPE_Assert(_Expression) (void) ((!!(_Expression)) || (raise(SIGTERM)))
import "C"
func Poly2Tri(verts [][2]float32, holes [][][2]float32) [][2]float32 {
sig := make(chan os.Signal, 10)
result := make(chan [][2]float32)
defer signal.Stop(sig)
go func() {
// Notify for all signals
signal.Notify(sig)
result <- poly2Tri(verts, holes)
}()
select {
case res := <-result:
return res
case <-sig:
return [][2]float32{}
}
}
那么,如何允许库在断言失败时退出,但允许我的应用程序继续?
我不认为该函数与此问题相关,但如果需要,我可以添加它。poly2Tri
一只名叫tom的猫
相关分类