据我所知(如果我错了请纠正我),托管语言(或至少是C#)不会产生任何segfault
(至少在没有Unsafe
或直接交易时与unmanaged memory
)。这与非托管语言(或至少是C ++)相反,你可以通过在编码时看一下你附近的猫来获得segfault
。
问题:托管语言如何确保这一点?他们的运行时库是如此仔细地构建和测试的。或者他们有办法捕捉这些段错误并以某种方式处理它?</ p>
这个问题背后的动机:我有C#应用程序调用本机C ++库(两者都是由我构建的)。当我的C ++ DLL进行segfault时,整个应用程序都会关闭(某些服务会停止运行),这根本不是一件好事。我知道,当遇到段错误时,这意味着某些事情做错了,需要纠正。但是,至少我想要一些机制来解决这个问题,当bug(可能导致segfault)C ++ DLL正在客户机器上工作。
答案 0 :(得分:2)
我想要一些机制来解决这个问题,当bug(可能导致segfault)C ++ DLL在客户机器上运行时。
问题是,即使你可以允许程序继续(我不知道Windows / c#是否提供任何机制来执行此操作),它可能不再处于有效状态,因此取决于错误是程序可以访问的是什么样的资源,这实际上可能导致更糟糕的错误,而不仅仅是程序崩溃,包括用户数据的破坏。