跳转至

4. Diagnostics

DiagnosticsEngine是clang中用来维护调试信息的对象,在创建CompilerInstance时并不会创建DiagnosticsEngine,需要手动的创建DiagnosticsEngine,并调用compilerInstance的createDiagnostics方法将其于compilerInstance对象关联起来

诊断引擎对象中的成员很多,其中有几个关键的对象:

  • DiagnosticIDs: 诊断引擎的ID,用以区分不同的诊断引擎对象。

  • DiagnosticOptions: 诊断引擎的各种选项,包括诊断等级,如何处理warning等基本设置。

- DiagnosticConsumer: 诊断引擎的consumer,这是一个抽象基类,前端需要继承该类进行相关成员的实现,其主要功能是将诊断引擎中保存的信息存储,并以预期的格式进行输出。

在DiagnosticConsumer类中,有两个重要的方法:

  • BeginSourceFile(): 标识对source file开始解析。

  • EndSourceFile(): 标识结束对source file的解析。

相关的重要类图如下所示,用户操作频率最高的是DiagnosticsEngine和DiagnosticConsumer,前者用来管理整个编译过程中所有和诊断相关的资源,后者用来解析诊断引擎中储存的信息并以合适的格式输出出来,而用户需要输出哪些信息,以及以什么样的格式输出,则需要通过DiagnosticOptions类来传递相应的诊断参数。

img