- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
看了几个帖子,我觉得很多问题的出现是因为编译器/实现不会多次发出非常有意义的消息(但并非总是如此)。对于错误消息至少非常令人生畏的模板来说尤其如此。一个例子可能是discussion topic
因此,我想了解几点:
a) 为什么编译器有时无法提供更有意义/有用的错误消息?是纯粹的实际原因还是技术原因,还是有其他原因。 (我没有编译器背景)
b) 为什么他们不能提供对最相关符合 C++ 标准节/节的引用,以便开发人员社区可以更好地学习 C++?
编辑:
引用线程 here再举个例子。
编辑:
引用线程 here再举个例子。
最佳答案
根本问题是编译器诊断会处理您没有编写的内容。
为了给您一个有意义的错误消息,编译器必须猜测您的意思,然后告诉您您的代码与那个有何不同。
如果您缺少分号,编译器显然无法在任何地方看到该分号。当然,它可以做的其中一件事就是猜测“也许用户漏掉了一个分号。毕竟这是一个常见的错误”。但是那个分号应该放在哪里呢?因为你犯了一个错误,代码无法解析成语法树,所以没有明确的指示“树中缺少这个节点”。并且可能有不止一个地方可以插入分号,以便周围的代码能够正确解析。此外,一旦发现可能的错误,您将尝试解析/重新编译多少代码?编译器可以插入分号,但至少必须重新开始解析该代码块。但也许它在代码中进一步引入了错误。所以也许整个程序应该重新编译,只是为了确保编译器提出的修复实际上是正确的。但这也不是一个选择。时间太长了。
假设你有这样的代码:
struct foo {
...
}
void bar();
这里有什么错误?看着它,您和我会说“您在类定义后缺少分号”。但是编译器怎么知道呢? void
可能是错字。也许您实际上打算写一个类型为 foo
的实例的名称。那么真正的错误是它后面跟着现在看起来像函数调用的东西。
所以编译器必须猜测。 “这看起来可能是一个类定义,它后面的内容看起来像是一个类型的名称。如果是这样,则用户缺少用于分隔它们的分号”。
而且猜测并不是一门非常精确的科学。事情变得更加复杂,因为每次编译器试图变得聪明并进行猜测时,如果猜测错误,它只会增加困惑。
所以有时候,输出一条简短的消息可能会更好,只说明我们确定的内容(例如,类定义不能后跟类型名称)。这不如说“你在类定义后少了一个分号”那么有用,但如果编译器猜错了,危害会小一些。
如果它告诉您缺少分号,而错误实际上是其他原因,那只是在误导您。因此,在最坏的情况下,简洁且帮助不大的错误消息可能会更好,即使在最好的情况下它并不那么好。
编写良好的编译器错误并不容易,尤其是在像 C++ 这样困惑的语言中。但话虽如此,一些编译器(包括 MSVC 和 GCC)可能会好得多。我相信更好的编译器诊断是 Clang 的主要目标之一。
关于c++ - 有意义的诊断信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3508628/
当我在一台机器上启动我的应用程序时,它立即退出说它已经“停止工作”。在事件日志中,我看到 MissingMethodException 是原因。没有显示异常对话框,并且在事件日志详细信息中我看不到任何
我正在从 Windows Phone 8 模拟器调用 Azure 移动服务。有时我会收到没有 InnerException 属性的 MobileServiceInvalidOperationExcep
我正在创建一个 Web 客户端,用于使用 ACS Calling SDK 加入 Teams session 。我在加载诊断 API 时遇到问题。 Microsoft 提供了此页面: https://l
知道为什么我的应用程序被杀死吗?我是该节点的唯一用户。 我的历史记录服务器也没有显示任何内容。我如何进一步追踪并了解是谁杀死了它,以及为什么以及如何修复它? ubuntu@anmol-vm1-new:
我正在创建一个 Web 客户端,用于使用 ACS Calling SDK 加入 Teams session 。我在加载诊断 API 时遇到问题。 Microsoft 提供了此页面: https://l
我正在寻找一种从 Windows Azure 中的性能计数器获取原始数据的方法 使用诊断 API。 到目前为止,我注意到我可以从已知的计数器中配置一个计数器 并设置该计数器的采样率。 诊断配置中配置的
我在将 WebRole(WCF 服务)部署到 Azure 时遇到问题。我的 WebRole 持续显示忙碌状态至少 30 分钟,直到我中止它。我通过 Visual Studio 2010 进行部署。我正
Clang has several kinds of diagnostics ,其中三种主要是错误、警告和注释。 注释通常伴随着某些警告和错误,例如重复定义: error: conflicting t
调试由于 Win32 生产过程中的死锁而导致的明显挂起的步骤和技术是什么。我听说 WinDbg 可用于此目的,但您能否提供有关如何实现此目的的明确提示? 最佳答案 此 post应该让您开始使用各种选项
我有一个在 Azure 上运行的应用程序,它会记录(实际上是跟踪)到 Azure 诊断存储。我正在寻找一个可以用来分析这些日志的好工具。 我知道可以使用 Visual Studio 中的服务器资源管理
我在当前项目中使用 Bazel 经历了很长的“干净构建”时间。 我们推荐的诊断步骤是什么? 最佳答案 尝试使用 --profile 分析您的构建 语法为 bazel build --profile f
我在解释 gcc (4.8.2) 警告和错误时遇到问题。更准确地说,很难分辨一个问题在哪里结束,另一个问题从哪里开始。我只能通过控制台访问构建机器,因此不能选择使用 IDE。 我真的需要能够快速区分个
我想为我的 azure 云服务启用 azure 诊断,但我有点困惑。 我读了这篇文章:https://learn.microsoft.com/en-us/azure/cloud-services/cl
我想我这里有个卷曲的地方...我有一个WinForms应用程序,当它作为x64进程运行时,它每小时大约会定期崩溃。我怀疑这是由于堆栈损坏引起的,并且想知道是否有人看到过类似的问题,或者是否有诊断和检测
我正在研究 Azure Web 角色的性能改进,并想知道在发布/部署到生产站点时是否应保留诊断。 This article说要禁用它,但其中一条评论说您会丢失关键数据。 最佳答案 您绝对应该启用它。一
我的解决方案中有多个 Web 和辅助角色,但我还有一个在 Azure 托管 VM 上运行的非 Azure 应用程序。该应用程序连接到 Azure 存储以执行各种操作,例如读取和写入 blob 和队列,
我仍在努力理清思路 Azure Service Fabric Stateful Actors 。因此,我的(当前)问题最好放入这样的示例中: 我有一个帮助台系统,其中每张票证都是一个有状态的参与者。参
CUDA 到处都有大量文档和指南,但我找不到任何形式的说明来指导如何诊断编译但收到神秘、模糊错误消息(例如“未指定启动”)的内核“这些 block /网格结构有意义吗?”等等 我可以以某种方式拦截cu
我没有找到太多解决 azure 事件网格中事件丢失场景的方法。 因此我提出与以下场景相关的问题: 我们的代码将事件发布到域。 事件将传送到订阅中配置的网络 Hook 。 这在一段时间内有效。 消费者(
这个问题有点宽泛,但我觉得没有一个地方可以帮助系统地诊断 Elasticsearch 问题。广泛的类别可能是: 客户 查询错误 查询结果不正确 无法解释的行为 服务器 设置问题 性能问题 严重错误 无
我是一名优秀的程序员,十分优秀!