gpt4 book ai didi

c++ - 调试编译的可执行文件 : Why not abort gracefully on invalid write to NULL?

转载 作者:太空狗 更新时间:2023-10-29 19:37:19 24 4
gpt4 key购买 nike

我对 C/C++ 的不理解是:

是的,每个人都用它来获得超快的可执行文件,所以他们在编译时启用了优化。

但是对于打开调试信息的编译,我们不关心速度。那么为什么不在该编译模式中包含更多信息,例如在某些段错误发生之前检测它们呢?实际上,在每次访问指针 ptr 之前插入一个 assert(ptr != NULL)。为什么编译器不能这样做?同样,这应该默认关闭,但我认为应该有这种可能性。

编辑:有人说我建议的检测没有意义,或者没有做segmentation fault报告不会做的任何事情。但我想到的只是一个更优雅、信息更丰富的中止,它会打印出违规代码的文件名和行号,就像 assert() 所做的那样。

最佳答案

在那种情况下程序应该做什么?如果它通知用户一个错误,那么这就是段错误的作用。

如果它应该继续前进并避免错误,它怎么知道该怎么做?

更不用说,如果它确实神奇地知道如何正确继续,那么您的发布版本中就有一个错误(调试版本旨在帮助您识别和修复错误 - 而不是隐藏它们)。


针对添加到问题中的附加信息(我想我误解了您的意图):

what I have in mind is just a more graceful and informative abort, which prints the file name and line number of the offending code, just like an assert() would do.

这是编译器可以做的事情——正如您所说,编译器基本上会在指针被取消引用的任何地方自动插入 assert()。这可能会显着增加调试版本的大小,但对于许多(或大多数)目的来说它可能仍然是可以接受的。我认为这对于编译器来说是一个合理的选择。

我不确定编译器供应商会怎么说...也许可以在 Microsoft's Connect site for the VC++ product 上发布请求看看他们怎么说。

关于c++ - 调试编译的可执行文件 : Why not abort gracefully on invalid write to NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com