C++ 忽略库的未定义行为

C++ 忽略库的未定义行为,c++,multithreading,undefined-behavior,C++,Multithreading,Undefined Behavior,我目前正在cpp中开发一个插件系统,它使用动态库作为插件,在各自的线程中运行。 我们有一些外部符号来启动和配置库,这些库基本上独立工作。 这些插件彼此独立运行,因此如果一个插件崩溃,我们不希望其他插件停止工作 到目前为止捕获异常是没有问题的,但是一旦我得到未定义的行为,它会导致整个系统停止(显然),尽管我希望错误包含在这些插件中 有没有办法在cpp中实现这一点? 提前谢谢 (单词plugin可能不是正确的选择,但我的英语技能不太好。请随意编辑。)您打算如何检测未定义的行为?根据它的定义,它将做什

我目前正在cpp中开发一个插件系统,它使用动态库作为插件,在各自的线程中运行。 我们有一些外部符号来启动和配置库,这些库基本上独立工作。 这些插件彼此独立运行,因此如果一个插件崩溃,我们不希望其他插件停止工作

到目前为止捕获异常是没有问题的,但是一旦我得到未定义的行为,它会导致整个系统停止(显然),尽管我希望错误包含在这些插件中

有没有办法在cpp中实现这一点? 提前谢谢


(单词plugin可能不是正确的选择,但我的英语技能不太好。请随意编辑。)

您打算如何检测未定义的行为?根据它的定义,它将做什么还没有定义。您可能很幸运,在做大量测试时发现了一些常见的模式,但即使这样也不能保证100%可靠。(你说它“显然”会停止整个系统只是运气的一个例子——未定义的行为可能会导致大量其他事情发生)也许以线程的形式运行比以线程的形式运行更不明智。如果他们是你系统过程的一部分,他们的UB自然会影响你。将它们作为自己的进程生成如何?当然,现在你需要IPC进行通信,但插件故障不会使你的整个应用程序崩溃。我同意@StoryTeller。在未定义的行为发生之前,您无法捕捉到它。当它发生的时候已经太晚了。运行到线程中自然会影响您的进程,如果任何进程线程出现问题,那么您的进程可能很容易被操作系统崩溃,或者以任何方式受到影响。如果您的进程无论如何都必须保持活动状态,并且您正在插件中运行“任意代码”,那么我会选择在单独的进程中运行每个插件。