Bytecode Visualizer

Inspect, understand and debug Java bytecode, no matter if you have the corresponding source.

Sourcecode Visualizer

Draws a control flow graph alongside of Java source code.

Control Flow Graph Factory

Eclipse plugin for generating, editing and exporting control flow graphs.

Control Flow Factory GraphXML Export

Control flow graph

The following control flow graph is a bytecode graph generated by Control Flow Factory:

control flow graph of the method C1.t()

Back to the top

GraphXML export -- plain

The Control Flow Graph Factory export of the graph C1.t() without visual or geometric information is presented below:

<?xml version="1.0"?>
<!DOCTYPE GraphXML SYSTEM "GraphXML.dtd">
<GraphXML>
 <graph version="1.0" vendor="www.drgarbage.com" id="C4.t.byte.graph">
   <node name="2">
    <label>0  iload_0</label>
   </node>
   <node name="3">
    <label>1  tableswitch</label>
   </node>
   <node name="4">
    <label>24  getstatic</label>
   </node>
   <node name="5">
    <label>27  iconst_1</label>
   </node>
   <node name="6">
    <label>28  iadd</label>
   </node>
   <node name="7">
    <label>29  putstatic</label>
   </node>
   <node name="8">
    <label>32  goto</label>
   </node>
   <node name="9">
    <label>35  iload_0</label>
   </node>
   <node name="10">
    <label>36  bipush</label>
   </node>
   <node name="11">
    <label>38  if_icmple</label>
   </node>
   <node name="12">
    <label>41  iinc</label>
   </node>
   <node name="13">
    <label>44  return</label>
   </node>
   <node name="14">
    <label>START</label>
   </node>
   <node name="15">
    <label>EXIT</label>
   </node>
  <edge source="14" target="2">
    <label></label>
  </edge>
  <edge source="2" target="3">
    <label></label>
  </edge>
  <edge source="3" target="4">
    <label>0</label>
  </edge>
  <edge source="4" target="5">
    <label></label>
  </edge>
  <edge source="5" target="6">
    <label></label>
  </edge>
  <edge source="6" target="7">
    <label></label>
  </edge>
  <edge source="7" target="8">
    <label></label>
  </edge>
  <edge source="3" target="9">
    <label>1</label>
  </edge>
  <edge source="9" target="10">
    <label></label>
  </edge>
  <edge source="10" target="11">
    <label></label>
  </edge>
  <edge source="11" target="12">
    <label>true</label>
  </edge>
  <edge source="3" target="13">
    <label>default</label>
  </edge>
  <edge source="8" target="13">
    <label></label>
  </edge>
  <edge source="11" target="13">
    <label>false</label>
  </edge>
  <edge source="12" target="13">
    <label></label>
  </edge>
  <edge source="13" target="15">
    <label></label>
  </edge>
 </graph>
</GraphXML>

Each node has a unique ID (name) and a label. The label includes information about the original code label="29 putstatic". In this example the information about the bytecode instruction.

Control flow specific information are assigned to the label of an edge for e.g. a switch table value or decision. The label may be empty.

Back to the top

GraphXML export with visual information

The GraphXML export of the graph C1.t() with visual information is presented below:

<?xml version="1.0"?>
<!DOCTYPE GraphXML SYSTEM "GraphXML.dtd">
<GraphXML>
 <graph version="1.0" vendor="www.drgarbage.com" id="C4.t.byte.graph">
   <node name="2">
    <label>0  iload_0</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="3">
    <label>1  tableswitch</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="4">
    <label>24  getstatic</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="5">
    <label>27  iconst_1</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="6">
    <label>28  iadd</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="7">
    <label>29  putstatic</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="8">
    <label>32  goto</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="9">
    <label>35  iload_0</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="10">
    <label>36  bipush</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="11">
    <label>38  if_icmple</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="12">
    <label>41  iinc</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="13">
    <label>44  return</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="14">
    <label>START</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="15">
    <label>EXIT</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
  <edge source="14" target="2">
    <label></label>
    <style>
       <line linestyle="dashed" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="2" target="3">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="3" target="4">
    <label>0</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="4" target="5">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="5" target="6">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="6" target="7">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="7" target="8">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="3" target="9">
    <label>1</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="9" target="10">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="10" target="11">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="11" target="12">
    <label>true</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="3" target="13">
    <label>default</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="8" target="13">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="11" target="13">
    <label>false</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="12" target="13">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="13" target="15">
    <label></label>
    <style>
       <line linestyle="dashed" linewidth="1.2" colour="black"/>
    </style>
  </edge>
 </graph>
</GraphXML>

Back to the top

GraphXML export with visual and geometric information

The export of the graph C1.t() with visual and geometric information is presented below:

<?xml version="1.0"?>
<!DOCTYPE GraphXML SYSTEM "GraphXML.dtd">
<GraphXML>
 <graph version="1.0" vendor="www.drgarbage.com" id="C4.t.byte.graph">
   <node name="2">
    <label>0  iload_0</label>
    <position x="152" y="84"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="3">
    <label>1  tableswitch</label>
    <position x="141" y="152"/>
    <size width="117" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="4">
    <label>24  getstatic</label>
    <position x="80" y="214"/>
    <size width="115" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="5">
    <label>27  iconst_1</label>
    <position x="90" y="282"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="6">
    <label>28  iadd</label>
    <position x="90" y="350"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="7">
    <label>29  putstatic</label>
    <position x="90" y="418"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="8">
    <label>32  goto</label>
    <position x="90" y="486"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="9">
    <label>35  iload_0</label>
    <position x="240" y="214"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="10">
    <label>36  bipush</label>
    <position x="240" y="282"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="11">
    <label>38  if_icmple</label>
    <position x="240" y="350"/>
    <size width="124" height="43"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="12">
    <label>41  iinc</label>
    <position x="294" y="437"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="13">
    <label>44  return</label>
    <position x="158" y="559"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="14">
    <label>START</label>
    <position x="152" y="16"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
   <node name="15">
    <label>EXIT</label>
    <position x="158" y="628"/>
    <size width="85" height="36"/>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
   </node>
  <edge source="14" target="2">
    <label></label>
    <style>
       <line linestyle="dashed" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="2" target="3">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="3" target="4">
    <label>0</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="4" target="5">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="5" target="6">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="6" target="7">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="7" target="8">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="3" target="9">
    <label>1</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="9" target="10">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="10" target="11">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="11" target="12">
    <label>true</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="3" target="13">
    <label>default</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="8" target="13">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="11" target="13">
    <label>false</label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="12" target="13">
    <label></label>
    <style>
       <line linestyle="solid" linewidth="1.2" colour="black"/>
    </style>
  </edge>
  <edge source="13" target="15">
    <label></label>
    <style>
       <line linestyle="dashed" linewidth="1.2" colour="black"/>
    </style>
  </edge>
 </graph>
</GraphXML>

Back to the top