第十四章 创建Callout Library - 故障排除和错误处理

发布时间:2024年01月04日

第十四章 创建Callout Library - 故障排除和错误处理

  • 最糟糕的做法 — 列出一些可能导致严重问题的做法。
  • 处理 UNIX 信号处理错误 — 描述了一些函数,可帮助从进程接收信号时可能发生的失败系统调用中恢复。

最糟糕的做法

尽管可以使用 $ZF Callout Interface 调用几乎任何例程,但它最适合用于数学函数。它还可以有效地用作 IRIS I/O 无法很好处理的外部设备的接口,或者用于 IRIS 接口不存在的某些系统服务。

以下操作可能会导致严重问题:

  • 访问任何不属于内存

内存访问违规将由 IRIS 处理,并将被视为 IRIS 中的错误。

  • 遇到陷阱处理的任何其他错误

由陷阱处理的错误(例如大多数平台上的除零错误)也将被视为 IRIS 中的错误。

  • 更改进程优先级

IRIS 需要与运行 IRIS 的其他进程进行交互。降低优先级和提高优先级一样糟糕。例如,假设进程在放弃 CPU 之前获取了自旋锁保护的资源。如果优先级太低,其他具有更高优先级的进程可能会争夺资源,从而有效地阻止进程运行,从而释放自旋锁。

  • 屏蔽中断

可以非常简单地屏蔽中断以实现自己的互锁,但应该非常小心,不要在任何时间段内都屏蔽中断。

  • 创建或打开任何无法清理的资源

可以打开文件并使用 malloc 分配内存,因为这些资源将在进程终止时关闭或释放。如果创建第二个线程,则无法保证第二个线程会在 IRIS 进程退出之前正常退出,因此不要创建第二个线程。

  • 从非 ObjectScript 代码返回非不透明对象

不要在代码中分配内存块并期望能够使用 $VIEW(address,?3,size) 来读取它。另外,不应该将 malloc 块传递回非 ObjectScript 代码。代码应该返回一个不透明句柄,稍后当它收到一个不透明句柄时,它应该在使用它之前验证它是否有效。

  • 退出进程

永远不应该只调用 exit。始终返回 ZF_SUCCESSZF_FAILURE(请记住,这些值的实现在 IRIS 平台之间有所不同)。

  • 通过调用 exec 的任何变体退出

可以 fork 然后在子进程中调用 exec,但请务必确保父进程始终返回 IRIS,而子进程永远不会返回 IRIS

  • 更改进程的错误处理行为

Windows 不同,UNIX 系统仅允许为当前帧和内部帧建立本地错误处理。

文章来源:https://blog.csdn.net/yaoxin521123/article/details/135377118
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。