Я попробовал этот пример проблемы:
Как создать граф вызовов для кода C ++
Ввод с использованием C ++:
static void D() { }
static void Y() { D(); }
static void X() { Y(); }
static void C() { D(); X(); }
static void B() { C(); }
static void S() { D(); }
static void P() { S(); }
static void O() { P(); }
static void N() { O(); }
static void M() { N(); }
static void G() { M(); }
static void A() { B(); G(); }
int main() {
A();
}
ТерминалКоманда для получения выходных данных:
$ clang++ -Xclang -analyze -Xclang -analyzer-checker=debug.ViewCallGraph main1.cpp
Я ищу способ явного указания имен функций / вызовов в выходных данных.
Попробовав решение по указанной выше ссылке (я пробовал решение с 8 ответами), я получил следующий вывод:
digraph unnamed {
Node0x7fb2086013b0 [shape=record,label="{\< root \>}"];
Node0x7fb2086013b0 -> Node0x7fb2086013f0;
Node0x7fb2086013b0 -> Node0x7fb208601430;
Node0x7fb2086013b0 -> Node0x7fb208601470;
Node0x7fb2086013b0 -> Node0x7fb2086014b0;
Node0x7fb2086013b0 -> Node0x7fb2086014f0;
Node0x7fb2086013b0 -> Node0x7fb208601530;
Node0x7fb2086013b0 -> Node0x7fb2086015d0;
Node0x7fb2086013b0 -> Node0x7fb208601610;
Node0x7fb2086013b0 -> Node0x7fb208601650;
Node0x7fb2086013b0 -> Node0x7fb208601690;
Node0x7fb2086013b0 -> Node0x7fb2086016d0;
Node0x7fb2086013b0 -> Node0x7fb208601710;
Node0x7fb2086013b0 -> Node0x7fb208601810;
Node0x7fb208601470 [shape=record,label="{X}"];
Node0x7fb208601470 -> Node0x7fb208601430;
Node0x7fb2086014f0 [shape=record,label="{B}"];
Node0x7fb2086014f0 -> Node0x7fb2086014b0;
Node0x7fb208601650 [shape=record,label="{N}"];
Node0x7fb208601650 -> Node0x7fb208601610;
Node0x7fb208601430 [shape=record,label="{Y}"];
Node0x7fb208601430 -> Node0x7fb2086013f0;
Node0x7fb2086015d0 [shape=record,label="{P}"];
Node0x7fb2086015d0 -> Node0x7fb208601530;
Node0x7fb208601710 [shape=record,label="{A}"];
Node0x7fb208601710 -> Node0x7fb2086014f0;
Node0x7fb208601710 -> Node0x7fb2086016d0;
Node0x7fb208601690 [shape=record,label="{M}"];
Node0x7fb208601690 -> Node0x7fb208601650;
Node0x7fb2086014b0 [shape=record,label="{C}"];
Node0x7fb2086014b0 -> Node0x7fb2086013f0;
Node0x7fb2086014b0 -> Node0x7fb208601470;
Node0x7fb2086016d0 [shape=record,label="{G}"];
Node0x7fb2086016d0 -> Node0x7fb208601690;
Node0x7fb208601530 [shape=record,label="{S}"];
Node0x7fb208601530 -> Node0x7fb2086013f0;
Node0x7fb2086013f0 [shape=record,label="{D}"];
Node0x7fb208601610 [shape=record,label="{O}"];
Node0x7fb208601610 -> Node0x7fb2086015d0;
Node0x7fb208601810 [shape=record,label="{main}"];
Node0x7fb208601810 -> Node0x7fb208601710;
}
Я ищу узлы, которые должны иметь конкретныеимена, а не просто "узел".
Можете ли вы привести пример кода C ++ о том, как выполнять синтаксический анализ для конкретных имен функций / вызовов, а не только для "Node".