在C ++中使用Doxygen和GraphViz的错误调用/调用者图形

时间:2017-12-12 17:40:24

标签: c++ doxygen graphviz

所以我开始使用Doxygen 1.8.13(Windows 10,64位)记录一个C ++项目,并遇到GraphViz的调用/调用者图生成问题。

如果使用以下代码生成文档,Doxygen将生成一个如下所示的调用图:

call graph

但是如代码所示,Path()不会调用任何函数(空体)。

struct Path {
  Path(const Node* source_node, const Node* target_node, 
       const unsigned long cost, const std::vector<const Node*> path)
      : source_node(source_node), target_node(target_node), 
      cost(cost), path(path), length(path.size()) { };

  void printCompletePath(std::ostream& = std::cout) const;

  const Node* source_node = nullptr;
  const Node* target_node = nullptr;
  const unsigned long cost = 0;
  const std::vector<const Node*> path{};
  const std::vector<const Node*>::size_type length = 0;
};

但如果我按如下方式重新排序代码,则调用图会消失(按预期):

struct Path {
  Path(const Node* source_node, const Node* target_node, 
       const unsigned long cost, const std::vector<const Node*> path)
      : source_node(source_node), target_node(target_node), 
      cost(cost), path(path), length(path.size()) { };

  const Node* source_node = nullptr;
  const Node* target_node = nullptr;
  const unsigned long cost = 0;
  const std::vector<const Node*> path{};
  const std::vector<const Node*>::size_type length = 0;

  void printCompletePath(std::ostream& = std::cout) const;
};

Doxygen和/或GraphViz错误是什么?或者我错过了什么? (我不想为Doxygen工作重新排序我的源代码。)

1 个答案:

答案 0 :(得分:2)

对于版本1.8.13,我可以重现有关调用图的问题。对于版本1.8.14,这个错误的调用图已经消失。

来自doxygen更改日志:函数定义后面的函数声明错误地列为调用依赖项[https://github.com/doxygen/doxygen/commit/436fc7ed1158d517dd6f6d25aa3e05568f8c3d94]