- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对 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/
在设置我的 default.vcl 文件 (Varnish 3) 时,我看到了对 vcl_fetch 使用 beresp.grace 或 obj.grace 的不同建议。有什么区别? https://
假设我有以下代码: public void run(){ while (true){ function1(); ... functionN();
我正在开发一个在 Linux 环境中作为守护进程运行的 Python 脚本。如果以及当我需要对设备发出关机/重启操作时,我想做一些清理并将数据记录到文件中以在关机期间保留它。 我四处查看有关 Linu
现在我正在使用 Process.Kill() 来终止进程。有没有办法,而不是立即杀死它,我可以向进程发送一条消息,指示它关闭,以便它可以优雅地清理和关闭。基本上,我正在寻找与单击右上角的红色 X 等效
收到消息Your password will be expired with in 7 days后,我将default配置文件的密码过期天数更改为UNLIMITED。但是某些用户的帐户状态仍保留在EX
我正在尝试 Docker 并遇到docker container stop # Gracefully stop the specified container 我不是在问docker stop和do
我有一个后台 worker 实现了 BackgroundService(由 MS 提供)。 看看这个简单的实现: public class MyService : BackgroundService
我全新安装了 Slackware 64 14 位,并查看了 Varnish installation documentation我安装了所有依赖项并编译了 varnish,没有错误(make chec
使用 D7 + Indy 10 最新版本。 我的代码使用 TIdSMTP 发送电子邮件。我不断收到一些最终用户的“连接正常关闭”的消息,但电子邮件从未发送。 代码如下: try ~~~~ ~~~~ _
如果我们在后台启动 KafkaStream 应用程序(比如 Linux),是否有办法从外部向应用程序发送信号,以启动正常关闭? 最佳答案 如文档 ( https://kafka.apache.org/
如果我们在后台启动 KafkaStream 应用程序(比如 Linux),是否有办法从外部向应用程序发送信号,以启动正常关闭? 最佳答案 如文档 ( https://kafka.apache.org/
我正在开发我的第一个多线程项目,因此有一些我不确定的事情。有关我的设置的详细信息位于 previous question简而言之:我有一个由 Executors.newFixedThreadPool(
目标:拥有带有嵌入式 Jetty 的 Spring Web 应用程序,我想正常关闭/重新启动该应用程序。 这是 EmbeddedServletContainerFactory bean(如果需要,我将
我已经配置了 grunt,当我运行“grunt serve”时,我得到这个错误: Error: Cannot find module 'graceful-fs' at Function.Mod
在等待 boost::process::child 时,您如何知道它是否“优雅地”退出? 假设我创建了一个流程: boost::process::child child( "myprg.exe", "
是 import multiprocessing import schedule def worker(): #do some stuff def sched(argv): sche
为冗长的介绍道歉 - 只是试图适本地设置场景以避免歧义和困惑。 Web 应用程序已经从用于服务器端逻辑的基于浏览器的笨接口(interface)发展为完全基于浏览器的应用程序,对服务器端逻辑的需求最少
我正在编写一个应用程序,希望客户能够直接从浏览器上传到 Amazon S3。我可以把这个工作做得很好。但是当错误发生时,我希望能够更优雅地处理它们,而不是将 XML 文档散布在客户的屏幕上。 我有一个
我正在观看有关 Datastax 的 DS201 类(class),讲师突然开始使用术语“GC GRACE”。 “GC Grace”和“gc_grace_seconds”究竟是什么? 最佳答案 'gc
我正在尝试找到一种方法来模拟set -e在函数中的行为,但仅在该函数的范围内。 基本上,我想要一个函数,如果有任何简单的命令将触发set -e,它将返回1的上一级。目的是将有风险的工作集隔离为功能,以
我是一名优秀的程序员,十分优秀!