====== VizEXEC ======
* 並列実行履歴を視覚化するツール
* スレッドで並列実行されるプログラムの実行履歴をシーケンス図っぽいもので自動的に視覚化する
* 実行するプログラムにマーカーを書き込むことで、マークした部分 (関数呼び出し、イベント発生やメッセージの通信) を視覚化できる
* プログラムの実行履歴をシーケンス図っぽく出せる
* マルチスレッドプログラムに対応(というかこれがメイン)
* 実行履歴をファイルに書き出し、それを読み込んで視覚化可能
* UNIXパイプを使えばリアルタイムに視覚化できる
===== Demo video =====
* 文字が小さくてすいません。。。
* これはリアルタイムに視覚化するサンプルです
{{youtube>large:AdXfukHjwx0}}
===== 構成 =====
==== ファイルの場合 ====
digraph usage {
node [fontsize=10 style=filled ];
node [shape = box style=filled fillcolor="#FFF0F0"];
cpp_prog[ label = "C++ Programs" ];
py_prog[ label = "Python Programs" ];
node [shape = ellipse fillcolor = "#CCCCFF"];
py_lw[ label = "LogWriter for Python" ];
cpp_lw[ label = "LogWriter for C++" ];
node [shape = note];
logfile[ label = "LogFile \n (File or Pipe)" fillcolor = "#FFFFFF"];
node [shape = box];
vizexec[ label = "vizexec.py (Visualizer)" fillcolor = "#F0FFF0" ];
cpp_prog -> cpp_lw [ label = "Use marker" ];
cpp_lw -> logfile [ label = "Output" ];
py_prog -> py_lw [ label = "Use marker" ];
py_lw -> logfile [ label = "Output" ];
logfile -> vizexec [ label = "Read" ];
}
* LogFileのところをmkfifoとかでパイプ (FIFO) にするとリアルタイムな視覚化ができる
==== TCPで接続する場合 ====
digraph usage {
node [fontsize=10 style=filled ];
node [shape = box style=filled fillcolor="#FFF0F0"];
subgraph cluster_cpp_prog
{
label = "C++ Program (Process)"
node [shape = box style=filled fillcolor="#FFF0F0"];
cpp_thread1 [ label = "Thread1" ];
cpp_thread2 [ label = "Thread2" ];
cpp_thread3 [ label = "Thread3" ];
node [shape = ellipse fillcolor = "#CCCCFF"];
cpp_lw[ label = "LogWriter for C++" ];
}
node [shape = box style=filled fillcolor="#FFF0F0"];
subgraph cluster_py_prog
{
label = "Python Program (Process)"
py_thread1 [ label = "Thread1" ];
py_thread2 [ label = "Thread2" ];
node [shape = ellipse fillcolor = "#CCCCFF"];
py_lw[ label = "LogWriter for Python" ];
}
node [shape = box];
vizexec[ label = "vizexec.py (Visualize Server)" fillcolor = "#F0FFF0" ];
node [shape = note];
logfile[ label = "LogFile" fillcolor = "#FFFFFF"];
cpp_thread1 -> cpp_lw [ ];
cpp_thread2 -> cpp_lw [ ];
cpp_thread3 -> cpp_lw [ label = "Use marker" ];
cpp_lw -> vizexec [ label = "TCP/IP" ];
py_thread1 -> py_lw [ ];
py_thread2 -> py_lw [ label = "Use marker or Hook" ];
py_lw -> vizexec [ label = "TCP/IP" ];
vizexec -> logfile [ label = "Write out" ];
}
* vizexecをサーバーとして動かすことができる
* ファイルの場合と同様にスレッドごとに出力
* プロセスをまたがったやりとりも可視化可能
* 必要に応じて履歴をすべてファイルに書き出すことができる
====== Download ======
* [[http://www.sunaga-lab.com/hgrepos/vizexec/archive/b83a93532eac.zip|VizEXEC 0.2]]
* [[http://www.sunaga-lab.com/hgrepos/vizexec/archive/bd4f5de27059.zip|VizEXEC 0.1]]
===== インストール =====
上からダウンロードしてコピーするだけ。
===== 依存ライブラリ等 =====
* Python
* PyGTK
* PyCairo
===== 動作確認環境 =====
* Gentoo Linux (Kernel 2.6.34, 32bit)
* Python 2.6
* PyGTK 2.16
* PyCairo 1.8.10
====== 使い方・仕様等 ======
* [[software:vizexec:logformat]]
* その他準備中・・・
====== ライセンス ======
* MIT License
* MIT Licence: http://www.opensource.org/licenses/mit-license.php