代码之家  ›  专栏  ›  技术社区  ›  Karl von Moor

C++中调用图的简单工具

  •  5
  • Karl von Moor  · 技术社区  · 15 年前

    是否有简单的工具,可以用来确定函数的调用位置,函数调用的其他函数是什么?

    编辑 :我使用的是MacOSX(10.6),只想做静态分析。

    谢谢!

    4 回复  |  直到 12 年前
        1
  •  4
  •   Dan    15 年前

    怎么样 cscope ?查看页面上的第3和第4个项目符号项:

    • 函数调用的函数
    • 调用函数的函数

    我在c++上使用cScice已经有一段时间了,我似乎记得它是在C代码上是摇滚的,但是没有C++那么强大。

        2
  •  7
  •   holmes    15 年前

    GTAGS是一个可以用来做标记的工具,但也可以用于调用跟踪。

    http://www.gnu.org/software/global/

    这支持C,C++,Yacc,Java和PHP4。 但是它不能正确处理C++模板或其他复杂的数据。

    使用这个标记解析器,我编写了一个脚本,从中获取调用树
    用户通过bash完成的选择如下:
    它在Google事件探查器代码中显示了一个调用树:

    % global-calltree -x prof_handler Add Evict ProfileData Stop DisableHandler RAW_CHECK WRITE_TO_STDERR
    prof_handler:414 => Add:441               |profiler.cc                         |instance_.collector_.Add(depth, stack);
     Add:241 => Evict:290                      |profiledata.cc                      |Evict(*e);
      Evict:61 => ProfileData:75                |profiledata.cc                      |ProfileData::ProfileData()
       ProfileData:124 => Stop:125               |profiledata.cc                      |Stop();
        Stop:261 => DisableHandler:273            |profiler.cc                         |DisableHandler();
         DisableHandler:400 => RAW_CHECK:405       |profiler.cc                         |RAW_CHECK(sigaction(SIGPROF, &sa, NULL) == 0, "sigaction failed");
          RAW_CHECK:83 => WRITE_TO_STDERR:86        |base/logging.h                      |WRITE_TO_STDERR("Check failed: " #condition ": " message "\n",           \
           WRITE_TO_STDERR:59 => DECLARE_int32:65    |base/logging.h                      |DECLARE_int32(verbose);
    
        3
  •  1
  •   Pontus Gagge    15 年前

    不知道简单的工具,但免费提供 codeviz (如果您愿意,可以读取原始转储,而不是生成图形)。警告:所有静态分析工具在虚拟调用方面都存在一些问题,更糟的是,在模板方面。

        4
  •  0
  •   lukmac    14 年前

    既然你使用Mac操作系统, 铿锵声 是一个具有静态分析功能的新编译器。

    YouTube上的一个例子: Finding bugs with clang

    推荐文章