问题排查

已知问题

  • Doxygen 不是 真正的编译器,它只是一个词法扫描器。这意味着它不能也不会检测您源代码中的错误。
  • Doxygen 有一个内置的预处理器,但它的工作方式与 C 预处理器略有不同。Doxygen 假设头文件已正确防止多重包含,并且每个包含文件都是独立的(即,它可以放置在源文件的顶部而不会导致编译器错误)。只要这是正确的(这是一个好的设计实践),您就不应该遇到问题。
  • 由于不可能测试所有可能的代码片段,因此很可能某些有效的 C/C++ 代码片段没有得到正确处理。如果您发现这样的代码片段,请将其发送给我,以便我可以改进 Doxygen 的解析能力。尽量使您发送的代码片段尽可能小,以帮助我缩小搜索范围。
  • 如果您的代码中有多个同名的类、结构或联合,Doxygen 将无法正常工作。但是,它不应该崩溃,而是应该忽略除一个之外的所有同名类。
  • 某些命令在其他命令的参数中不起作用。例如,在 HTML 链接(即 <A HREF="...">...</A>) 中,其他命令(包括其他 HTML 命令)不起作用!分节命令是一个重要的例外。
  • 在某些情况下,多余的大括号会使 Doxygen 感到困惑。例如
      void f (int);
    
    被正确解析为函数声明,但
      const int (a);
    
    也被视为名称为 int 的函数声明,因为只分析语法,不分析语义。如果可以检测到多余的大括号,如
      int *(a[20]);
    
    那么 Doxygen 将删除大括号并正确解析结果。
  • 并非所有包含在文档中的代码片段中的名称都由链接替换(例如,当使用 SOURCE_BROWSER = YES 时),并且指向重载成员的链接可能指向错误的成员。为每个函数生成的“引用自”列表也是如此。

    部分原因是代码解析器目前不够智能。我会在将来尝试改进这一点。但即使有了这些改进,也不能将所有内容都正确链接到相应的文档,因为可能存在歧义或缺乏关于代码片段所在上下文的信息。

  • 如果类 A 已经有一个名为 f 且具有相同参数列表的成员,则无法使用 \relates\relatesalso 命令在类 A 中插入非成员函数 f。
  • 目前仅对成员特化提供非常有限的支持。它仅在存在专门的模板类时才有效。
  • 并非所有特殊命令都被正确转换为 RTF。
  • dot 的 1.8.6 版本(以及可能更早的版本)不会生成正确的映射文件,导致 Doxygen 生成的图形无法正确点击。
  • 仅限 PHP:Doxygen 要求所有 PHP 语句(即代码)都封装在函数/方法中,否则您可能会遇到解析问题。

如何提供帮助

Doxygen 的开发高度依赖于您的输入!

如果您正在尝试使用 Doxygen,请告诉我您对它的看法(您是否缺少某些功能?)。即使您决定不使用它,也请告诉我原因。

如何报告错误

错误在 GitHub 的 问题跟踪器中进行跟踪。在提交新错误之前,请先在数据库中搜索是否已有人提交了相同的错误。如果您认为找到了一个新错误,请报告它

如果您不确定某件事是否是错误,请先在 用户邮件列表 或在 Stack Overflow 上使用 doxygen 标签寻求帮助(需要订阅)。

如果您只发送对错误的(模糊)描述,通常不会有太大帮助,我将花费更多时间来弄清楚您的意思。在最坏的情况下,您的错误报告甚至可能被我完全忽略,因此始终尝试在您的错误报告中包含以下信息

  • 您正在使用的 Doxygen 版本(例如 1.5.3,如果不确定,请使用 doxygen --versiondoxygen --Version 获取更多信息)。
  • 您的操作系统的名称和版本号(例如 Ubuntu Linux 18.04 LTS)
  • 通常,发送配置文件也是一个好主意,但请在使用 Doxygen 时使用 -s 标志来保持其较小(使用 doxygen -s -u [configName] 从现有配置文件中剥离注释。更好的是,在使用的 [configName] 上使用 -x-x_noenv 标志来获取使用的设置与 Doxygen 默认设置之间的差异,因此使用 doxygen -x [configName])。
  • 我修复错误的最简单(通常也是唯一)方法是,如果您可以附加一个小的示例,演示您遇到的问题到错误报告中,以便我可以在我的机器上重现它。请确保该示例是有效的源代码(可能可以编译),并且该问题确实被该示例捕获(我经常收到无法触发实际错误的示例!)。如果您打算发送多个文件,请将这些文件压缩或打包成单个文件,以便于处理。请注意,在报告新错误时,您只有在提交初始错误描述才有机会附加文件。
  • 在提交之前,请考虑使用一些调试标志运行 Doxygen,对于所有标志,请运行 doxygen -d。选项 preprocessor 可能会提示 Doxygen 如何理解您的输入文件。

您可以(并且鼓励您)为报告的错误添加补丁。如果您这样做,请在 pull request form 中使用“issue #NUMBER TITLE”作为标题,其中“NUMBER”和“TITLE”指的是 GitHub 上相关的 issue。

如果您有关于如何修复现有错误和限制的想法,请在 开发者邮件列表(需要订阅)上讨论它们。如果您不想通过错误跟踪器或邮件列表发送补丁,也可以直接发送至 doxyg.nosp@m.en@g.nosp@m.mail..nosp@m.com

对于补丁,请使用“diff -uN”或包含您修改的文件。如果您发送多个文件,请将所有内容打包或压缩,这样我只需要保存和下载一个文件。

转到下一节或返回到索引