# HG changeset patch # User Takato Matsuoka # Date 1642831230 -32400 # Node ID 1ba2a1f7c4e52ed51cd0923359b5eaed2fc398e3 # Parent 739159c6668d92ef92ca4856f1e044dd829fb740 Add descriptions of existing debugger diff -r 739159c6668d -r 1ba2a1f7c4e5 paper/src/meta.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/meta.pm Sat Jan 22 15:00:30 2022 +0900 @@ -0,0 +1,17 @@ +package meta; +use strict; +use warnings; + +sub replaceMeta { + return ( + [qr/HelloImpl/ => \&generatedebugMeta], + ); +} + +#my ($currentCodeGearName, $context, $next) = @_; + +sub generatedebugMeta { + my ($context, $next) = @_; + return "goto debugMeta($context, $next);"; +} +1; diff -r 739159c6668d -r 1ba2a1f7c4e5 paper/src/prompt_result.txt --- a/paper/src/prompt_result.txt Fri Jan 21 22:19:23 2022 +0900 +++ b/paper/src/prompt_result.txt Sat Jan 22 15:00:30 2022 +0900 @@ -1,9 +1,7 @@ -$ ./DPPMC -debug -get -debug option in main function +$ ./Debug_hello_world cpus: 1 gpus: 0 -ffffffff ffffffff ffffffff ffffffff ffffffff 46000000 46000000 46000000 46000000 46000000 flag 0 0x7ff5c6d05da0 -> 0x7ff5c6d05da0 hash d4d42cb2 -4: thinking -ffffffff ffffffff ffffffff ffffffff ffffffff 23000000 46000000 46000000 46000000 46000000 flag 0 0x7ff5c6d05da0 -> 0x7ff5c6c041f0 hash cf87d844 iter 5 +length: 102400 +length/task: 12800 (Gears Debugger) diff -r 739159c6668d -r 1ba2a1f7c4e5 paper/text/existingDebugger.tex --- a/paper/text/existingDebugger.tex Fri Jan 21 22:19:23 2022 +0900 +++ b/paper/text/existingDebugger.tex Sat Jan 22 15:00:30 2022 +0900 @@ -1,2 +1,20 @@ \chapter{既存のデバッガについて} -GearsDebuggerの開発にあたってGDB\cite{gdb}やLLDB\cite{lldb}などの既存のデバッガについて触れていく。 \ No newline at end of file +デバッガとはプログラムのデバッグを行う際に用いられるソフトウェアであり、変数の値を確認したり、プログラムを1行単位で実行したりしながらプログラムのバグの発見・修正を行う。 + + \section{代表的なデバッガの機能} + 既存のデバッガとしてGDB\cite{gdb}やLLDB\cite{lldb}などが挙げられる。またこれらのデバッガの持つ代表的な機能として以下が挙げられる。 + + \section{ステップ実行} + プログラムを1ステップずつ実行させる機能である。これによりプログラムの動作を1つずつ確認することができる。ステップ実行には種類がありステップイン、ステップオーバー、ステップアウトなどがある。 + + \section{変数の値の確認} + 現在の状態における変数の確認ができる機能である。変数だけでなく、構造体やクラスなどの値を確認することもできる。これを用いて任意の状態における変数の値を確認することで、プログラマーが意図した処理が正常に実行されているかどうかを確かめることができる。 + + \section{ソースコードの表示} + プログラムをステップ実行する際にどの行を実行しているかを表示する。 + + \section{ブレークポイント} + ブレークポイントはプログラムの任意の行や関数を指定することでその箇所でプログラムの実行を一時停止する機能である。ブレークポイントを設定して、変数の値の確認など行うことで変数に正しい値が格納されているかどうかなどを確かめることができる。 + + \section{スタックトレース} + スタックトレースとはプログラムの実行手順を確認できる機能で、関数がどのように呼び出されているのかを確認できる。これを使うことでプログラムの実行順を追いやすくなりデバッグ作業を行う上で重要な機能である。 \ No newline at end of file diff -r 739159c6668d -r 1ba2a1f7c4e5 paper/text/gearsdebugger.tex --- a/paper/text/gearsdebugger.tex Fri Jan 21 22:19:23 2022 +0900 +++ b/paper/text/gearsdebugger.tex Sat Jan 22 15:00:30 2022 +0900 @@ -1,8 +1,28 @@ \chapter{GearsDebugger} -本研究では、GearsOSに特化したデバッガとしてGearsDebuggerの開発を行った。 -本章ではGearsDebuggerの機能や仕組みについて記述していく。 +本研究では、GearsOSに特化したデバッガとしてGearsDebuggerの開発を行った。本章ではGearsDebuggerの持つ機能や仕組みについて記述する。 + +TODO: Gearsの場合、前章の既存デバッガを使うにあたってどういう問題があるのかを提起する。 + +\section{GearsDebuggerの持つ機能} +GearsDebuggerの持つ機能として以下が挙げられる。 + +\subsection{ユーザーインプット機能} +ユーザーインプット機能はユーザーが行いたいデバッグ処理を指定するための機能で、プロンプトにより対話形式でデバッグコマンドを入力することでデバッグが可能になった。 +デバッグコマンドは後述するnextやpdコマンドなどが存在する。ソースコード\ref{src:prompt_result}の7行目に(Gears Debugger)があるが、これがユーザーへ入力を促すプロンプトである。 -\section{DebugWorker} +\lstinputlisting[label=src:prompt_result, caption=ユーザーへ入力を促すプロンプト]{src/prompt_result.txt} + +\subsection{CodeGear単位でのデバッグ} +GearsOSはCodeGearとDataGearを単位として実行される。そのためデバッグ時においては1つのCodeGearを実行した後の情報を見ることで、そのCodeGearによってどのDataGearがどのように変化したのかを見ることができる。そのため1つのCodeGear実行後にdebugMetaを呼ぶことによりCodeGear単位でのデバッグを実現している。 +また、次のCodeGearを実行したい場合はnextもしくはn コマンドを入力することで次のCodeGearへと遷移する。 + +\subsection{DataGearの表示} +CbCのデータ単位であり、GearsOSの基本単位であるDataGearの表示が可能となった。 +表示する際にはprint DataGearを意味するpdコマンドを入力する。また複数存在するDataGearの指定に対応するため、オプションでDataGear名を指定することで特定のDataGearの表示が出来る。表示の際には全てのDataGearの参照ができるcontextを経由して参照を行う。実際にDPPMCで使用されるDataGearであるPhilsの表示結果をソースコード\ref{src:pd_example}に示す。 + +\lstinputlisting[label=src:pd_example, caption=pdコマンドを用いたPhilsの表示結果]{src/pd_example.txt} + +\section{DebugWorker} \label{DebugWorker} Debug用のWorkerとしてDebugWorkerの作成を行った。通常のWorkerと異なる部分として、debugMetaの実装が挙げられる。ソースコード\ref{src:debugMeta}がdebugMetaの定義の一部である。ソースコード\ref{src:debugMeta}の1行目の\_\_ncodeは、ユーザーが定義できるMetaCodeGearである。通常のCodeGearの定義はソースコード\ref{src:hello}の1行目のように\_\_codeを用いて定義を行う。この\_\_codeを使った定義の場合はトランスパイラによる変換時にノーマルレベルのCodeGearだと判断され、メタ計算を行うStubCodeGearがトランスパイラによって生成される。しかし\_\_ncodeを使ったCodeGearの定義はトランスパイラによってMetaCodeGearと判断され、Stubの生成などがされない。 GearsOSはノーマルレベルとメタレベルの分離を実現するため、ノーマルレベルのCodeGearからMetaDataGearであるContextへの参照を行わない。GearsDebuggerにおいてはデバッグ情報をContextから取得するため、デバッグ処理を行うCodeGearはノーマルレベルのCodeGearではなくMetaCodeGearである必要がある。そのため\_\_ncodeを用いてデバッグ用MetaCodeGearであるdebugMetaを作成している。 @@ -10,9 +30,6 @@ \lstinputlisting[label=src:debugMeta, caption=\_\_ncodeを用いたdebugMetaの定義]{src/debugMeta.cbc} \lstinputlisting[label=src:hello, caption=通常の\_\_codeを用いたCodeGearの定義]{src/hello.cbc} - - - \section{DebugTaskManager} Debug用のTaskManagerとしてDebugTaskManagerの作成を行った。 通常は\ref{TaskManager}で触れたTaskManagerを用いるが、GearsDebuggerにおいてデバッグする場合はDebugTaskManagerを用いる。通常のTaskManagerとの違いとしてはまずWorker生成部が挙げられる。デバッグ時には通常用いられるWorkerではなく、DebugWorkerを用いる。このWorkerの生成はTaskManagerで行うため、DebugTaskManagerにおいてはWorker生成時にDebugWorkerを生成する。 @@ -24,10 +41,17 @@ 2つ目の違いとしては、DebugTaskManagerはメモリ状態を保存するためのDBであるstateDBの情報を持つ。 -\section{DataGearの表示} +\section{debugMeta} +\ref{DebugWorker}でDebugWorker内にdebugMetaを作成したが、そのdebugMetaの行う処理について記述していく。 +debugMetaはデバッグ処理におけるユーザーインプット部分を担うMetaCodeGearである。GearsDebuggerは1つのCodeGearの実行後にDataGearの表示などデバッグ情報を見たい。そのため、各CodeGearの呼び出し後にdebugMetaを呼び出すことでユーザーに入力を促す。これによって各CodeGear実行後にデバッグを行うことができる。各CodeGearの呼び出し後にdebugMetaを呼び出す方法については、meta.pm\cite{meta.pm}というGearsOSのビルドシステムのAPIを用いている。通常はCodeGear実行後、次のCodeGearのStubCodeGearへと遷移するが、meta.pmを使うことでCodeGear実行後の遷移先を特定のMetaCodeGearへと変更することができる。ソースコード\ref{src:meta.pm}にmeta.pmを示す。ソースコード\ref{src:meta.pm}の7行目にqr/HelloImpl/と正規表現がある。トランスパイラはこの正規表現にマッチしたCodeGearのgoto先を切り替えている。例でいうと、HelloImplという文字列を含むCodeGearがあった場合、ソースコード\ref{src:meta.pm} 13行目のサブルーチンgeneratedebugMetaを呼び出し、goto先をdebugMetaへと切り替えている。 + +\lstinputlisting[label=src:meta.pm, caption=meta.pm]{src/meta.pm} + + + diff -r 739159c6668d -r 1ba2a1f7c4e5 paper/text/reference.tex --- a/paper/text/reference.tex Fri Jan 21 22:19:23 2022 +0900 +++ b/paper/text/reference.tex Sat Jan 22 15:00:30 2022 +0900 @@ -9,6 +9,7 @@ \bibitem{cmake} https://cmake.org/ \bibitem{parusuMaster} 伊波 立樹. Gears OSの並列処理. 琉球大学大学院理工学研究科情報工学専攻修士論文, March 2018. \bibitem{anaguraMaster} 清水隆博. GearsOSのメタ計算. 琉球大学大学院理工学研究科情報工学専攻修士論文, March 2021. +\bibitem{meta.pm} 清水隆博. GearsOSのメタ計算. 琉球大学大学院理工学研究科情報工学専攻修士論文, pp.77, March 2021. \end{thebibliography} diff -r 739159c6668d -r 1ba2a1f7c4e5 paper/thesis.pdf Binary file paper/thesis.pdf has changed