【问题标题】:Wrong call/caller graph with Doxygen and GraphViz in C++C++ 中使用 Doxygen 和 GraphViz 的错误调用/调用者图
【发布时间】:2018-05-26 11:38:01
【问题描述】:

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

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

但正如代码所示,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 工作而重新排序我的源代码。)

【问题讨论】:

    标签: c++ doxygen graphviz


    【解决方案1】:

    使用 1.8.13 版,我可以重现有关调用图的问题。在 1.8.14 版本中,这个错误的调用图消失了。

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

    【讨论】:

    • 感谢您的回答(由于最后一个“]”,您的链接已损坏)
    • 谢谢,我也遇到了同样的问题,按照doxygen.org/download.html的说明安装18.14后解决了;值得注意的是;这也提醒了我 Doxygen(目前)有时确实会犯错误的事实,请记住这一点。 (例如,如果您在一个名为“first”的类上有一个成员,然后在成员方法中定义一个名为“first”的本地,当访问本地上的成员时,它将被视为对成员而不是本地的调用它也存在于成员上,即使在词法上不是这样。)
    • @Joeppie 如果提到的问题是问题,请在 doxygen 问题跟踪器 (github.com/doxygen/doxygen/issues/new) 中发布问题或在 stackoverfoow 上发布问题。
    • 嗨 Albert,我会尽量在我的日常工作中抽出时间来为它做一份适当的报告,是的,谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 2015-09-15
    • 2012-12-15
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2016-10-09
    • 2015-12-10
    相关资源
    最近更新 更多