Table of Contents
mrubyの準備
mrubyの取得・コンパイル
以下コマンドを実行して、mrubyを取得・コンパイルします。
$ git clone git@github.com:mruby/mruby.git
$ cd mruby
$ make all
もし、ここで何らかのエラーが出るようであれば以下ファイルを参照して、不足しているツールやライブラリが無いか確認してください。大抵はgccやmakeが無かったり、bisonが無かったりといった原因であることが多いです。
mrubyに含めるgemを変更し、デバッグモードにする
21世紀のC言語勉強会 #1ではmruby-socket, mruby-ioのソースコードを読む予定とのことです。
デフォルト設定だとこれらのmrbgemは含まれていないので、設定を変更します。
build_config.rb
をエディタで開いて、conf.gembox
の引数を full-core
に変更します。
MRuby::Build.new do |conf|
# load specific toolchain settings
(省略)
# include the default GEMs
# conf.gembox 'default' <- コメントアウト
conf.gembox 'full-core' # <- 追加
# C compiler settings
(省略)
# bintest
# conf.enable_bintest
end
(省略)
また、デバッグを有効にするために enable_debug
のコメントを無効化します。
MRuby::Build.new do |conf|
# load specific toolchain settings
(省略)
# Turn on `enable_debug` for better debugging
enable_debug # <- コメントを外す
(省略)
# include the default GEMs
# conf.gembox 'default' <- コメントアウト
conf.gembox 'full-core' # <- 追加
# C compiler settings
(省略)
# bintest
# conf.enable_bintest
end
(省略)
完了したら、再度コンパイルしておきましょう。
$ make clean
$ make all
VS Codeの設定
C/C++ Extensionsをインストール
[EXTENSIONS] -> [C/C++]を開いてインストールします。
lldbのインストール
macであればデフォルトでlldbがインストールされていると思いますが、ない場合はインストールしておきます。
デバッグ対象のサンプルプログラムを準備
今回はサンプルとして mruby-socket のREADMEに記載されているサンプルプログラム(example.rb)を準備します。
s = TCPSocket.open("www.kame.net", 80)
s.write("GET / HTTP/1.0\r\n\r\n")
puts s.read
s.close
デバッグ設定
VS CodeでC言語のコード(例: mruby.c
)を開いて F5
キーを入力します。
launch.json
が開かれるので以下の通り設定します。
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) 起動",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/mruby",
"args": ["${workspaceFolder}/example.rb"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb"
}
]
}
以上で設定完了です。
デバッグ
試しに socket.c
の mrb_socket_connect()
にブレイクポイントを貼ってみます。
このまま、 F5
キーを入力します。
ブレイクポイントを貼った行でプログラムの実行が中断しています。このまま、各変数の値を参照したり・書き換えたりすることもできますし、プログラムを任意の行まで進めることもできます。
まとめ
久々にmruby, C言語に触れるので、ワクワクドキドキしています!