通常当您调用assert(foo())
并且断言失败时,程序会自动终止。有没有办法添加某种处理程序,可以在退出之前清理一些资源?
可以处理SIGABRT
信号并进行清洗。当然assert只是用于调试应用程序,所以最好直接修复导致失败的问题,而不是编写优雅地失败的代码。
assert的全部意义在于转储__FILE__
和__LINE__
信息并立即调用abort()。如果不想这样做,可以使用清理处理程序进行自己的错误检查,或者按照另一个答案中的建议进行检查,并捕获abort()本身。对于你的具体问题,assert只是一个宏,所以你不能直接挂钩它。章节和节,参见ISO C99, 7.2.1, p2