Parse Call Graph - PullRequest
       18

Parse Call Graph

1 голос
/ 03 июля 2019

Я попробовал этот пример проблемы:

Как создать граф вызовов для кода 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".

...