c++ - C++ 调用图的简单工具

标签 c++ static-analysis

是否有简单的工具可以用来确定从哪里调用一个函数,该函数调用了哪个其他函数......?

编辑:我使用的是 Mac OS X (10.6),只想进行静态分析。

谢谢!

最佳答案

gtags 是一种可用于标记的工具,但也可用于调用跟踪。

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

这支持 C、C++、Yacc、Java 和 PHP4。 但它不能正确处理 C++ 模板或其他复杂的东西。

使用这个标记解析器,我制作了一个脚本来从
用户通过 bash 完成的选择,如下所示,
它在谷歌分析器代码中显示一个调用树:

% 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);

关于c++ - C++ 调用图的简单工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027508/

相关文章:

c++ - 结合 Clang AST

Java:显示方法调用中使用的所有字符串

perl - 如何在 Perl 中找到复制/粘贴(复制、克隆)代码?

C++ if语句超过4位

实现相同接口(interface)的对象/类之间的 C++ 数据共享

c++ - 虚拟模板设计

python - 排除目录

c++ - 强制更新 QGraphicsScene 上的 drawForeground

c++ - 在智能指针的取消引用值上调用 std::move()

java - java的跨类可扩展静态分析工具?