视觉 SIGSEGV 在C++碰撞预防

visual SIGSEGV Crash prevention in C++

本文关键字:碰撞 C++ SIGSEGV 视觉      更新时间:2023-10-16

通过将 main 的主体放在 __try{} __catch{} 块中来防止 SIGSEGV 崩溃有什么问题?无论如何,不会发生任何不好的事情,因为操作系统会阻止它,而且无论我尝试执行什么操作,我都会失败。我同意这不是正确的做法。但是,除了我可能会使某些操作失败之外,还有什么问题?

通过将 main 的主体放在 __try{} __catch{} 块中来防止 SIGSEGV 崩溃有什么问题?

可能无法保证解决问题。导致SIGSEGV的大多数事情都是由未定义的行为引起的。当程序的行为未定义时,不能保证接收SIGSEGV,也不能保证它的行为符合您的要求。任何行为都是可能的。在这种情况下,最安全的做法通常是终止该过程。

使用__try{} __catch{}以防万一本身并不一定是错误的,但请注意,这是一个编译器和系统特定的功能,因此,如果您关心这一点,则需要采取其他步骤来保持程序可移植到其他编译器和系统。

此外,让程序崩溃通常具有操作系统可以为您生成核心转储的优势,该转储可用于调试程序以找出崩溃的原因。我对__try{} __catch{}不是很熟悉,但如果它像常规catch那样展开堆栈,那么调用跟踪信息就会丢失,这可能会使调试更加困难。