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