Вопрос

Есть ли простой инструмент, который можно использовать, чтобы определить, откуда вызывается функция, какую другую функцию она вызывает ...?

Редактировать:Я использую Mac OS X (10.6) и просто хочу провести статический анализ.

Спасибо!

Это было полезно?

Решение

Как насчет cscope?Ознакомьтесь с 3-м и 4-м маркированными пунктами на странице:

  • функции, вызываемые функцией
  • функции, вызывающие функцию

Прошло много времени с тех пор, как я использовал cscope на C ++, кажется, я помню, что он был надежен в коде C, но не так силен в C ++.

Другие советы

gtags - это инструмент, который вы можете использовать не только для пометки, но и для отслеживания вызовов.

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

Это поддерживает C, C ++, Yacc, Java и PHP4.Но он не может должным образом обрабатывать шаблоны C ++ или другие сложные материалы.

Используя этот анализатор тегов, я создал скрипт для получения дерева вызовов из
выбор пользователя посредством завершения bash следующим образом,
который отображает calltree в коде профилировщика 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);

Не разбираюсь в простых инструментах, но бесплатно есть codeviz ( кодевиз ) (вы можете читать необработанные дампы, а не генерировать графики, если вам так больше нравится).Предостережение:все инструменты статического анализа имеют некоторые проблемы с виртуальными вызовами и еще хуже с шаблонами.

Поскольку вы используете mac os, лязг это новый компилятор с функцией статического анализа.

Пример на YouTube:Поиск ошибок с помощью clang

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top