【问题标题】:Parsing C/C++ compilation errors printed by GCC解析 GCC 打印的 C/C++ 编译错误
【发布时间】:2017-04-07 02:35:18
【问题描述】:

给定 c/cpp/.h 文件,我想编译它们并找出编译错误(和警告)。

从编译错误,我想生成一个结构或表格,

{
  level: (ERROR/WARNING)
  fileName: 'hello.cc'
  lineNumber: 24
  char: 5 (if available, or can be skipped)
  message: 'The description of the error'
}
  1. 在 Java 中,有一个 Java 编译器 API。是否有类似的 C++ API?
  2. 如果唯一的选择是解析 gcc 或 g++ 的输出,如何解析错误信息,以便生成上述结构的数组?

我查看了一些错误消息。对于来自 gcc 的许多错误消息,我查看了所有错误行以 'filename: In function main' 或 'filename:lineNumber:column' 开头 并且所有多行错误消息都由一些空格缩进

是否可以假设,以非空白字符开头的行是错误行的开头?

注意:过去 10 年我从未编写过 c++ 程序,我正在为 Codiva.io online compiler 构建 C/C++ 支持(目前仅支持 java)。我觉得,与其提供控制台输出,不如在每一行解析和显示将是一种良好的用户体验,并为学生节省大量时间。 解析来自 clang 编译器的错误消息会更容易吗?

【问题讨论】:

  • 您可以使用 liblang 对已解析的 c++ 代码进行自定义处理。
  • 没有打印编译器错误的标准。它们可能因每个编译器供应商而异。
  • 问题“如何解析?”对于SO 来说可能太宽泛了。
  • 使用模板,简单的结构是不够的。您通常有一个实例化堆栈,它具有可变长度。
  • @MSalters 我不明白你的评论。

标签: c++ gcc g++


【解决方案1】:

随着即将推出的 gcc 9.0,有一个输出 JSON 的选项:-fdiagnostics-format=json

https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多