故障排除

已知问题

  • 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)
  • 通常,发送配置文件也是一个好主意,但在生成配置文件时请使用带有 -s 标志的 Doxygen 以使其保持较小(使用 doxygen -s -u [configName] 从现有配置文件中删除注释。更好的是,在使用的 [configName] 上使用 -x-x_noenv 标志来获取使用设置和 Doxygen 默认设置之间的差异,即 doxygen -x [configName])。
  • 对我来说,修复错误最简单(通常也是唯一)的方法是,你可以在错误报告中附带一个演示你所遇到的问题的小示例,这样我就可以在我的机器上重现它。请确保示例是有效的源代码(可能可以编译)并且问题确实被示例捕获(我经常收到未触发实际错误的示例!)。如果你打算发送多个文件,请将文件压缩或打包成一个文件,以便于处理。请注意,在报告新错误时,你只有在提交初始错误描述之后才能附加文件。
  • 在提交之前,还可以考虑使用一些调试标志运行 Doxygen,运行 doxygen -d 以查看所有标志。选项 preprocessor 可能会给你关于 Doxygen 如何理解你的输入文件的提示。

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

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

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

转到下一节或返回索引