Может ли 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'
Другие вопросы по тегам