gpt4 book ai didi

c++ - 如何处理第三方库代码中的 exit() 调用?

转载 作者:可可西里 更新时间:2023-11-01 15:00:11 25 4
gpt4 key购买 nike

我正在开发一个 C++ 应用程序,它使用另一个团队用 C 语言编写的库。库的编写者喜欢在发生错误时调用exit(),这会立即结束程序,而不用在C++应用程序中调用栈上对象的析构函数。应用程序设置了一些系统资源,这些资源在进程结束后不会被操作系统自动回收(共享内存区域、进程间互斥等),因此这是一个问题。

我有应用程序和库的完整源代码,但是库已经非常完善并且没有单元测试,所以更改它会很麻烦。有没有一种方法可以“ Hook ”对 exit() 的调用,以便我可以为我的应用程序实现正常关闭?

我正在考虑的一种可能性是制作一个大类,应用程序 - 这意味着所有清理都将在其析构函数或其中一个成员的析构函数中发生 - 然后分配其中一个main() 中堆上的大对象,设置一个指向它的全局指针,并使用 atexit() 注册一个处理程序,该处理程序仅通过全局指针删除对象指针。这可能有效吗?

是否有已知的解决此问题的好方法?

最佳答案

在最坏的情况下,您总是可以编写自己的 exit 实现并链接它,而不是系统自己的实现。您可以在那里处理错误,并可选择调用 _exit(2)自己。

因为你有库源,它更容易 - 只需在构建它时添加一个 -Dexit=myExit 标志,然后提供 myExit 的实现。

关于c++ - 如何处理第三方库代码中的 exit() 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14199689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com