# HG changeset patch # User Takahiro SHIMIZU # Date 1541737887 -32400 # Node ID 2a21f7911f9249e3c3747be5e09d4b43a9f8714c # Parent e216aa15e656d0835288ac56c26c35e7112a7abf add debug info diff -r e216aa15e656 -r 2a21f7911f92 Paper/anatofuz.pdf Binary file Paper/anatofuz.pdf has changed diff -r e216aa15e656 -r 2a21f7911f92 Paper/anatofuz.tex --- a/Paper/anatofuz.tex Fri Nov 09 13:15:45 2018 +0900 +++ b/Paper/anatofuz.tex Fri Nov 09 13:31:27 2018 +0900 @@ -381,10 +381,13 @@ しかしMoarVMが実行する命令は膨大な数がある. その為gdbでMoarVMをCbCとオリジナル版での並列デバッグを人間が同時に行うことは困難である. Perlなどのスクリプトを用いて自動的に解析したいため,ログを残す為にscriptコマンドを実行した状態でgdbを起動する. - +トレースでは実行した命令名のみ取得できれば良い為,Code\ref{cbc_b},\ref{orig_b}でdebug pointにcommandとして設定している様に,設定されたcur\_opの値を出力し続けるのみの動きを導入する. +実際に実行したログ・ファイルの一部をそれぞれCode\ref{debug_origmoar},\ref{debug_cbcmoar}に示す. \lstinputlisting[label=debug_origmoar, caption=オリジナル版MoarVMのバイトコードのトレース]{./src/origin_breakpoint.txt} +\lstinputlisting[label=debug_cbcmoar, caption=CbCMoarVMのバイトコードのトレース]{./src/trace_cbc.txt} +オリジナル版では実際に実行する命令処理はラベルに変換されてしまう為名前をデバッガ上では出力できないが,CbCでは出力する事が可能である. CbCとオリジナルのCODES,LABELの添字は対応している為,ログの解析を行う際はそれぞれの添字を抽出し違いが発生している箇所を探索する. これらはscriptコマンドが作成したログを元に異なる箇所を発見するスクリプトを用意し自動化する. \lstinputlisting[label=logs2, caption=バイトコードの差分検知の一部分]{./src/logs2.txt} diff -r e216aa15e656 -r 2a21f7911f92 Paper/src/trace_cbc.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/src/trace_cbc.txt Fri Nov 09 13:31:27 2018 +0900 @@ -0,0 +1,15 @@ +Breakpoint 2, cbc_next (i=0x7fffffffdc30) at src/core/cbc-interp.cbc:61 +61 goto NEXT(i); +$1 = (void (*)(INTERP)) 0x7ffff7566f53 +$2 = 162 + +Breakpoint 2, cbc_next (i=0x7fffffffdc30) at src/core/cbc-interp.cbc:61 +61 goto NEXT(i); +$3 = (void (*)(INTERP)) 0x7ffff7565f86 +$4 = 140 + +Breakpoint 2, cbc_next (i=0x7fffffffdc30) at src/core/cbc-interp.cbc:61 +61 goto NEXT(i); +$5 = (void (*)(INTERP)) 0x7ffff7579d06 +$6 = 558 +