我们的应用程序使用odbc驱动程序访问Impala数据库。我们已经发现,在某些难以复制的情况下,驱动程序将在其cgo代码中触发段错误,一旦它通过驱动程序和我们的代码传回,就会显示为致命错误。由于我们希望在这些情况下进行一些清理和警报,因此我实施了一个延迟的恐慌捕获器,希望这可能会捕获它们。
但是,它不起作用。致命错误继续直接超过包含Intent
调用的延迟函数(因此显然它不是恐慌,尽管打印输出看起来相似),尽管它确实捕获了其他恐慌。 A github issue表明无法捕获cgo信号,并且应用程序应该毫不客气地立即崩溃(如果发生)。对于我们的生产应用程序来说,这是一个不可接受的崩溃案例,所以我想知道在过去的6年中是否有所改变,或者是否有人知道在cgo信号的情况下运行某些清理代码的另一种方式。看起来非常糟糕的设计根本无法抓住并处理这些致命的错误。