编译C++程序时,从哪里开始检查错误消息
Where to start examining error message when compiling C++ programs?
编译C++程序时,我经常会遇到错误消息,其中一些消息很容易破译,但另一些消息很长,因此很有挑战性。在Python中,通常从查找错误消息中的最后一条语句开始。在C++中检查长编译器错误消息时应该如何处理?
我猜模板误用引起的错误,可能来自标准库,正在困扰您。有几种方法可以做到这一点,但是,我发现最好找到(长)错误报告中与我的代码相关的部分,而不是一些STL头(比如<vector>
)。然后,您可以尝试从那里推断错误,来回查看报告的其他错误,"遵循类型"。
还有一些"错误分析器",它们依赖于编译器及其版本,但有些人发现它们很有用。"STLFilt"是其中之一,但我从未使用过它,所以不能说它有多好。
此外,尝试使用CLang
进行编译,它比大多数编译器具有更好的错误报告功能,尽管GCC最近正在迎头赶上。它有GCC和CL(Microsoft Visual C/C++编译器)的"插入式"替代品。
从第一个错误开始。这些通常是最相关的。后面的错误通常是由第一个错误引起的,所以消除第一个错误通常也会省略后面的一堆错误。重复冲洗,直到全部固定。
正如另一个答案中所提到的,使用多个不同的编译器编译代码通常会很有帮助,因为它们会以不同的方式显示错误,并且某些错误使用某些编译器会产生比其他编译器更好(更容易理解)的错误报告。用不同的方式描述这个问题通常有助于理解(我个人用clang 3.8、gcc 6.1和VS2015构建了所有东西,除了有助于处理不同的错误输出外,不同的编译器也会发现不同的错误——这是一个额外的好处)。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 如何创建一个循环,该循环检查每次迭代并在每次迭代后从头开始
- 检查目录树是否可以在不实际开始删除的情况下删除
- 如何检查从mx文件,如果Matlab开始与GUI
- 如何在c++中检查字符串开始
- 编译C++程序时,从哪里开始检查错误消息
- C++ - 返回循环开始而不检查条件