故障排除

已知问题

  • 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 命令将非成员函数 f 插入到类 A 中。
  • 目前对成员特化只提供非常有限的支持。它仅在存在特化模板类时才有效。
  • 并非所有特殊命令都能正确转换为 RTF。
  • dot 版本 1.8.6(可能也包括更早的版本)无法生成正确的地图文件,导致 Doxygen 生成的图形无法正常点击。
  • 仅限 PHP:Doxygen 要求所有 PHP 语句(即代码)都包裹在函数/方法中,否则您可能会遇到解析问题。

如何提供帮助

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

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

如何报告错误

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

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

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

  • 您使用的 Doxygen 版本(例如 1.5.3,如果您不确定,请使用 doxygen --version,或使用 doxygen --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 如何理解您的输入文件的提示。

您可以(并且鼓励您)为报告的错误添加补丁。如果这样做,请在拉取请求表单中将标题格式设置为“issue #NUMBER TITLE”,其中“NUMBER”和“TITLE”指的是 GitHub 上关联的问题。

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

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

转到下一节或返回索引