Mercurial > hg > Papers > 2019 > anatofuz-prosym
changeset 40:2a21f7911f92
add debug info
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 09 Nov 2018 13:31:27 +0900 |
parents | e216aa15e656 |
children | de0f0fa18b71 |
files | Paper/anatofuz.pdf Paper/anatofuz.tex Paper/src/trace_cbc.txt |
diffstat | 3 files changed, 19 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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}
--- /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 <cbc_takeclosure> +$2 = 162 + +Breakpoint 2, cbc_next (i=0x7fffffffdc30) at src/core/cbc-interp.cbc:61 +61 goto NEXT(i); +$3 = (void (*)(INTERP)) 0x7ffff7565f86 <cbc_checkarity> +$4 = 140 + +Breakpoint 2, cbc_next (i=0x7fffffffdc30) at src/core/cbc-interp.cbc:61 +61 goto NEXT(i); +$5 = (void (*)(INTERP)) 0x7ffff7579d06 <cbc_paramnamesused> +$6 = 558 +