Graphviz 不理解 GCC 输出

问题描述

运行

gcc -fdump-tree-all-graph main.cpp -o main

应该产生可读的点文件。但是,运行

dot .\main.cpp.027t.einline -Tpng -o "main.png"

在任何生成的点文件上都会导致错误

Error: .\main.cpp.013t.cfg.dot: Syntax error in line 1 near 'subgraph'

Gcc 版本:10.2.0 Graphviz 版本:2.47.0

这个问题对于所有 C/C++ 文件仍然存在。我做错了什么?

编辑:通用 C++ 程序

int main() {}

创建 15 个点文件,所有这些文件看起来都类似于:

subgraph "cluster_main" {
    style="dashed";
    color="black";
    label="main ()";
    fn_0_basic_block_0 [shape=Mdiamond,style=filled,fillcolor=white,label="ENTRY"];

    fn_0_basic_block_1 [shape=Mdiamond,label="EXIT"];

    fn_0_basic_block_2 [shape=record,fillcolor=lightgrey,label="{\<bb\ 2\>:\l\
|D.2331\ =\ 0;\l\
}"];

    fn_0_basic_block_3 [shape=record,label="{\<bb\ 3\>:\l\
|\<L0\>:\l\
|return\ D.2331;\l\
}"];

    fn_0_basic_block_0:s -> fn_0_basic_block_2:n [style="solid,bold",color=blue,weight=100,constraint=true];
    fn_0_basic_block_2:s -> fn_0_basic_block_3:n [style="solid,constraint=true];
    fn_0_basic_block_3:s -> fn_0_basic_block_1:n [style="solid,color=black,weight=10,constraint=true];
    fn_0_basic_block_0:s -> fn_0_basic_block_1:n [style="invis",constraint=true];
}
}

解决方法

不是答案,但评论有点长

使用程序时:

fetchall

命令:

int main() {}

我得到的文件之一:main.cpp.027t.einline.dotwith content:

gcc -fdump-tree-all-graph main.cpp -o main

在 Cygwin 上使用:

digraph "main.cpp.027t.einline" {
overlap=false;
subgraph "cluster_main" {
        style="dashed";
        color="black";
        label="main ()";
        fn_0_basic_block_0 [shape=Mdiamond,style=filled,fillcolor=white,label="ENTRY"];

        fn_0_basic_block_1 [shape=Mdiamond,label="EXIT"];

        fn_0_basic_block_2 [shape=record,fillcolor=lightgrey,label="{\<bb\ 2\>:\l\
|_1\ =\ 0;\l\
}"];

        fn_0_basic_block_3 [shape=record,label="{\<bb\ 3\>:\l\
|\<L0\>:\l\
|return\ _1;\l\
}"];

        fn_0_basic_block_0:s -> fn_0_basic_block_2:n [style="solid,bold",color=blue,weight=100,constraint=true];
        fn_0_basic_block_2:s -> fn_0_basic_block_3:n [style="solid,constraint=true];
        fn_0_basic_block_3:s -> fn_0_basic_block_1:n [style="solid,color=black,weight=10,constraint=true];
        fn_0_basic_block_0:s -> fn_0_basic_block_1:n [style="invis",constraint=true];
}
}

所以这对我来说没什么问题。