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

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

谢谢!

有帮助吗?

解决方案

怎么样 范围?查看页面上的第三项和第四项项目:

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

自从我在 C++ 上使用 cscope 以来已经有一段时间了,我似乎记得它在 C 代码上坚如磐石,但在 C++ 上却没有那么强大。

其他提示

gtags是一个工具,你可以用做标记,但调用跟踪为好。

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

此支持C,C ++,Yacc的,Java和PHP4。 但它不能处理的C ++模板或其它复杂的东西正常。

使用此标记解析器,我做了一个脚本来得到结果调用树 通过bash补全像下面,点击用户的选择 这是在谷歌探查代码显示calltree:

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

不知道有简单的工具,但对于自由,有 codeviz (你可以读取原始转储,而不是如果你喜欢的生成图表)。警告:所有的静态分析工具有一些问题,虚拟电话,甚至与模板差。

由于您使用Mac OS,请是一个新的编译器静态分析功能。

YouTube上的一个例子: 寻找具有铛

的错误
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top