Может ли clang сгенерировать граф вызовов для проекта Xcode (в Objective-C? - PullRequest
13 голосов
/ 31 января 2012

Я нашел этот пример , который выглядит так, как будто он выводит то, что я хочу для C ++.Как это можно сделать для кода Objective-C в проекте XCode?

Я вижу упоминания о том, что Doxygen может создать граф вызовов, но не могу найти пример.

(Я хочу лучше узнать Clang, но начать сложно...)

1 Ответ

12 голосов
/ 31 января 2012

Абсолютно.Есть пара трюков, которые вам нужно понять, но это не так уж и плохо.

Во-первых, вам нужна совместимая версия opt, поскольку она не поставляется с LLVM Apple.Я получил мой из 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, который будет выводить эту информациюв несколько ином формате, если вы хотите продолжить обработку.

...