所以你是说在系统抛出错误之前,它应该抛出一个错误......警告你即将发生的错误?
有什么意义?当我遇到段错误时,我知道这意味着我遇到了段错误。我不需要单独的消息首先说“你现在会遇到段错误”。
我完全错过了这里的重点吗?:p
编辑:
我明白你在编辑中的意思,但实施起来并不容易。问题在于,如果您访问错误的指针,决定发生什么的不是编译器、语言或运行时。该语言正式对此不作任何承诺或保证。相反,操作系统会触发一个错误,而不知道这是一个调试可执行文件,也不知道哪个行号触发了问题,或者其他任何事情。这个错误唯一说的是“你试图访问地址 X,我不能允许。死”。编译器应该如何处理这个?
那么谁应该生成这个有用的错误消息呢?如何?编译器可以这样做,当然,但是将每个指针访问包装在错误处理中,以确保如果发生段错误/访问冲突,我们会捕获它,并改为触发断言。问题是,这将非常缓慢。不仅“发布太慢”,而且“太慢无法使用”。它还假定编译器可以访问您调用的所有代码。如果调用第三方库中的函数怎么办?内部的指针访问不能包含在错误处理代码中,因为编译器不会为该库生成代码。
操作系统可以做到这一点,假设它愿意/能够加载相关的符号文件,以某种方式检测你是否正在运行调试可执行文件等等......只是这样它就可以打印出一个行号。谈论过度工程。这几乎不是操作系统的工作。
最后,你会通过这样做获得什么?为什么不简单地启动你的调试器呢?当发生这种情况时,它会自动中断,为您提供精确的行号和其他所有内容。
可以做到,但会非常复杂,涉及编译器和操作系统,收益也非常小。你会得到一个弹出框,告诉你调试器已经能够告诉你的信息。有了这些信息,您就可以……无论如何启动调试器以找出问题所在。