我有一个应用程序 A(某公司 X)。这个应用程序允许我通过编写自己的函数来扩展功能。
我告诉应用程序 A 在应用程序 A 的配置文件中调用我的用户函数(这是它知道应用程序 A 必须调用用户编写的函数的方式)。appl A 使用函数指针,我必须在调用我的用户编写的函数之前向 Application A 注册。
如果我的用户在生产中编写的函数出现错误或故障,Appl A 将停止运行。例如,如果我的用户编写的函数中有分段错误。
所以应用程序 A 将从共享的 DLL 文件中加载我的用户编写的函数。这意味着我的用户编写的函数将在应用程序 A 的进程地址空间中运行。
我希望处理某些信号,如分段错误、除以零和堆栈溢出,但应用程序 A 有自己为此编写的信号处理程序,
如何编写自己的信号处理程序来捕获用户编写的函数中的异常,以便我可以优雅地清理而不影响应用程序 A 的大部分内容?由于我的用户函数将在应用程序 A 的进程中调用,因此操作系统将调用在应用程序 A 中编写的信号处理程序,而不是我的用户函数。
我怎样才能改变这个?我希望操作系统调用在我的函数中编写的信号处理程序,但仅用于由我的函数引发的信号,这本质上是异步的。
注意:我没有应用程序 A 的源代码,我无法对其进行任何更改,因为它由不同的公司控制。
我将在 Linux、solaris 和可能的 Windows 平台上使用 C,并且仅使用 C。