2016-08-01 7 views
2

私は最近、dotを使って、かなり複雑なアセンブリプログラムのフローグラフとコールグラフを作成しています。すべてのことが、ちょっとしたヒックアップで完璧にうまくいきます。時には、あるクラスター内のあるノードから別のクラスター内の別のノードに線を引くと、線は何とか倍増します。ドットツールの二重矢印

コードとドット出力イメージとして私の問題を削除しました。

おかげ

digraph G { 

    ratio=auto; node[fontsize=12]; label="boot"; newrank=true; 

    { 
    node[shape=plaintext]; 
    1->2[arrowsize=0.7,penwidth=0.1]; 
    } 

    Reset->uart_init[arrowsize=0.7, penwidth=0.1]; 

    { rank=same; "Reset"; "1"; } 
    { rank=same; "uart_init"; "2"; } 

    /* terminalhooks cluster */ 
    subgraph cluster42 { 
    fontsize=12; 
    label="terminalhooks.asm"; 
    labelloc=b; 
    type->emit[arrowsize=0.7,penwidth=0.1]; 
    emit[label=<emit<BR/><FONT POINT-SIZE="8">Terminal redirection hooks<BR/>für eventuelle Umleitungen</FONT>>]; 
    } 

    /* stm-terminal cluster */ 
    subgraph cluster43 { 
    fontsize=12; 
    label="stm-terminal.asm"; 
    labelloc=b; 
    emit->serial_emit->serial_qemit[arrowsize=0.7,penwidth=0.1]; 
    serial_emit[label=<serial_emit<BR/><FONT POINT-SIZE="8">Ausgabe Char via UART</FONT>>]; 
    serial_qemit[label=<serial_qemit<BR/><FONT POINT-SIZE="8">Prüft TXE (Transmit Buffer Empty)</FONT>>]; 
    } 
    { rank=same; "type"; "emit"; "serial_emit"; "serial_qemit"; } 
} 

dot graph

答えて

1

私は考え、なぜこの出来事を持っていませんが、tailport=eを追加すると、それを修正するようだ:

emit->serial_emit->serial_qemit[tailport=e,arrowsize=0.7,penwidth=0.1]; 
#       -----^----- 

編集:

それはnewrank表示されます問題を引き起こす原因。

digraph G { 
    newrank=true; 
    subgraph cluster42 { 
     0; 
     1; 
     0->1; 
    }  
    subgraph cluster43 { 
     2; 
     3; 
     1->2->3; 
    }  
    { rank=same; 0; 1; 2; 3; } 
} 

プロデュース:

pic1

いますが、削除した場合:

newrank=true; 

それが生産:

pic2

編集2:この例では

あなたがrankdir=LRを使用してrank=sameを削除することができます。

digraph G { 
    rankdir=LR; 
    subgraph cluster42 { 
     0; 
     1; 
     0->1; 
    }  
    subgraph cluster43 { 
     2; 
     3; 
     1->2->3; 
    } 
} 

pic3

多分あなたはあまりにもあなたの複雑なグラフと同じことを行うことができます。

+0

何らかの理由で、それは私の例で動作しますが、矢印をかなりねじ込みます。しかし、tailport = eを追加した他のグラフでは、さらに別の行が追加されます。 – Vinci

+0

@Vinciは私の編集を見ます。 'newrank'は必要ですか? –

+0

あなたはそうです、newrankがそれを引き起こしています。私はランクとクラスターを使用してアセンブラファイルのカプセル化を表示しています... newrankがなければ、関数の周りのボックスはグラフの解釈を困難にします。 @Vinci最終編集。 – Vinci