Может ли clang сгенерировать граф вызовов для проекта Xcode (в Objective-C?
Я нашел этот пример, который выглядит так, как будто он выводит то, что я хочу для C++. Как это можно сделать для кода Objective-C в проекте XCode?
Я вижу упоминания о том, что Doxygen может создавать граф вызовов, но не могу найти пример.
(Я хочу лучше узнать лязг, но сложно начать...)
2 ответа
Абсолютно. Есть несколько уловок, которые вам нужно понять, но это не так уж плохо.
Во-первых, вам нужна совместимая версия opt
, так как это не идет с судами Apple LLVM. Я получил мой из Macports:
port install llvm-3.0
Затем вам нужно скомпилировать ваш файл. Выработка параметров иногда может быть немного болезненной. Самый простой способ - позволить Xcode собрать его, затем перейти к журналам и вырезать и вставить гигантскую строку сборки. Раньше я мог их взломать, но мне стало лень....
Вынь последний -o
параметр (удобно в конце строки компиляции) и подставьте:
-S -emit-llvm -o - | opt-mp-3.0 -analyze -dot-callgraph
Затем, как в другом примере:
$ dot -Tpng -ocallgraph.png callgraph.dot
Имейте в виду, что в ObjC есть несколько функций, которые часто вызываются, и о них вы почти никогда не заботитесь. В частности, почти все, что начинается с objc_
, К счастью, формат DOT - это очень простой текстовый файл, и довольно легко написать сценарии постобработки, чтобы вырезать то, что вам не нужно.
Там также есть -print-callgraph
параметр, который выведет эту информацию в немного другой формат, если вы хотите выполнить дальнейшую обработку.
Я столкнулся с ошибкой в командной строке xcodebuild. чего-нибудь не хватает?
xcodebuild: error: invalid option '-emit-llvm'