# HG changeset patch # User anatofuz # Date 1550400958 -32400 # Node ID 88a3fb5e5b182b004d0df2b8d77ecc73b7d9e169 # Parent efe90261de013896cf205146b9076d1c938a903b update diff -r efe90261de01 -r 88a3fb5e5b18 paper/chapter4.tex --- a/paper/chapter4.tex Sun Feb 17 17:56:51 2019 +0900 +++ b/paper/chapter4.tex Sun Feb 17 19:55:58 2019 +0900 @@ -264,10 +264,12 @@ \section{CbCMoarVMのデバッグ} +CbCMoarVMが正常にバイトコードを実行しているかどうかは、 正常に動くオリジナルのMoarVMと、 実行したバイトコードの差分を検知することで確認する事が可能である。 +入力として与えたスクリプトは常に同じバイトコードに変換されると考えられるが、 MoarVMはバイトコードにUUIDの様な物を埋め込んでしまう為、 同じファイルを与えても生成されるバイトコードが異なってしまう。 +その為、 NQPインタプリタのREPLの様な機能を使い、 それぞれのVMが同じ命令から処理を開始する様に調整する。 -従って、 テストコードを利用するのではなく、 オリジナルのMoarVMで動くべき命令と、 実際にCbCMoarVMで動いている命令がどう違うかを確認する。 - - +差分は、 バイトコードインタプリタのMVM\_interp\_runのソースコード中で、 次の命令を計算する箇所で、 命令に対応する数値を出力する様に付け加える。 +その出力を、 gdbなどのデバッガとscriptコマンドなどを用いてログを取り、 perlなどのスクリプトを用いて解析する。 実際に差分を確認したスクリプトの実行結果の一部を、 ソースコード\ref{cbc_origin_diff}に示す。 \lstinputlisting[frame=lrbt, label=cbc_origin_diff, caption=MoarVMとCbCMoarVMの実行命令の差分検知]{./codes/diff.txt} diff -r efe90261de01 -r 88a3fb5e5b18 paper/main.pdf Binary file paper/main.pdf has changed