【问题标题】:Why doesn't doxygen create a callgraph of my C++ code? [closed]为什么 doxygen 不创建我的 C++ 代码的调用图? [关闭]
【发布时间】:2019-02-18 11:16:35
【问题描述】:

我从以下站点下载了源代码:https://github.com/ApolloAuto/apollo/blob/master/modules/control/integration_tests/simple_control_test.cc,我想分析代码的模块如何相互交互。因此,我做了一个网络搜索,发现 Doxygen 可以做这样的事情。我完全按照此处描述的步骤操作:https://www.youtube.com/watch?v=mgVgZjaeNkw 但是,当我导航到上面教程中所示的“html”文件夹并单击 index.html 文件时,我得到了这个:

如您所见,没有文件选项卡(如视频中所示)或任何有关代码的信息。我是不是忘记了什么?我能做什么?

【问题讨论】:

  • 欢迎提供详细信息。阅读How to AskMinimal, Complete, and Verifiable example。在这种情况下,了解以下内容非常重要:代码是否记录在案?您在 Doxyfile 中使用了哪些与标准 Doxyfile 不同的设置?
  • “学习 C++ 和...” - 知道这是一个很容易的多年项目。如果你想把它提高到“学习 C++ ”,它很容易是一个 5 年以上的项目(学习/全职学习) - C++ 是一个大的并且 复杂的野兽,难以掌握。
  • 好的,感谢 cmets!我会尽快提供一个最小的、完整的和可验证的例子。我知道学习 C++ 是一个多年的项目。但是,如果您的工作是理解数十万行未记录的代码,您会怎么做?嗯,我尽量做到最好……
  • 你的系统上安装了graphviz吗?据我记得,如果你想生成调用图,doxygen 需要它。
  • 是的,我已经安装了 graphviz。感谢您提出这个问题(编辑了我的问题)!

标签: c++ documentation doxygen


【解决方案1】:

最可能的问题是没有使用正确的设置,因为可能没有为 doxygen 记录代码。

需要设置为YES:

  • HAVE_DOT
  • CALL_GRAPH
  • CALLER_GRAPH
  • EXTRACT_ALL
  • EXTRACT_PRIVATE
  • EXTRACT_PACKAGE
  • EXTRACT_STATIC
  • EXTRACT_LOCAL_CLASSES
  • EXTRACT_LOCAL_METHODS
  • EXTRACT_ANON_NSPACES
  • 递归

有关这些变量的含义,请参阅 doxygen 手册(还有更多可能性)。

我刚刚在根目录下做了一个测试,这里创建了一个默认的doxygen配置文件(doxyfile):

  • doxygen -g

并编辑了文件:

  • 设置INPUT = apollo-master/modules/common
  • RECURSIVEYES 之外的上述其他变量

我运行了 doxygen (doxygen) 并启动了结果:html\index.html on Windows on a *nix system with Firefox firefox html/index.html,在“doxygen 搜索窗口”(右上角)ExportFlags 中输入并单击根据结果​​,我得到了函数 ExportFlags 的文档,包括调用和调用者图。

【讨论】:

  • 谢谢阿尔伯特!实际上,其中一些变量尚未设置为 YES。然而,他们现在,这并没有解决问题。我了解什么是最小的、完整的、可验证的示例。但是,我很难在这里提供一个。不过,我唯一能提供的是完整的源代码(到目前为止我对此一无所知)。它是开源的:github.com/ApolloAuto/apollo/blob/master/modules/control/… 我还能提供什么来提出更好的问题?非常感谢您。
  • 根据 GSIO01 的评论:您是否收到任何警告/错误消息(当然除了“未记录”的消息?)。此外,我看到您引用了一个测试模块(integration_tests),最好先看一下源代码本身,测试框架可能使用了一些一开始很难掌握的宏设置。
  • 由于您也是 C++ 新手,因此最好不要立即开始使用如此复杂的代码。拥有一个 MCVE 就是从 1 或 2 个小文件开始,以使某些东西正常工作并获得使用某些工具的经验。
  • 感谢您的 cmets albert。不,我没有收到任何警告。一切都按预期工作,我只是没有得到有关代码结构的任何信息。并感谢您自己先查看的提示。鉴于我的问题似乎在此期间被搁置了(考虑到我正在描述我所知道的所有问题,但那不是主题,我感到很难过,对吧?),我会做这一切手。我对文件一无所知,即使,例如文件“integration_tests”,实际上是一个测试模块。无论如何,谢谢!
  • 顺便说一句,我可以使用任何类型的文件从这1、2个小文件开始获得经验吗?还是这些文件实际上必须相互关联(这意味着我需要找到两个这样的文件或创建这样的文件)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
相关资源
最近更新 更多