Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Xcodeでmrubyをステップ実行してみた

749 views

Published on

Shinjuku.rb #57

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Xcodeでmrubyをステップ実行してみた

  1. 1. Xcodeでmrubyをステップ実 行してみた Shinjuku.rb #57
  2. 2. 自己紹介 ● @hotpepsi ● 趣味 ○ ピアノ、テニス、競技プログラミング、ボルダリング ● ライフワーク ○ デバッグ
  3. 3. Agenda ● mrubyほとんど使ったことない ● ステップ実行して調べてみよう ○ Debugger driven code reading
  4. 4. 用意するもの ● Xcode ○ MacのAppStoreからインストール ● Homebrew ● mruby ○ Mac用にビルドする
  5. 5. Xcodeのプロジェクトファイル (.xcodeproj) ● 直接追加するソースはmruby.cだけ ● その他の部分はlibmruby.aをリンクする https://github.com/firewood/mruby/tree/xcode
  6. 6. Xcodeのプロジェクトファイル (.xcodeproj) ● Schemeの設定
  7. 7. hello.rb p "Hello, world!"
  8. 8. 改造する ● ロシアンルーレット ● 1/6の確率で死ぬ ● 死んだらデバッガで調べられる https://github.com/firewood/mruby/tree/rr
  9. 9. Random::russian_roulette static mrb_value mrb_russian_roulette(mrb_state *mrb, mrb_value self) { mrb_value r = mrb_random_rand(mrb, self); // randを呼ぶ if (r.value.f < 1.0/6) { int *p = 0; *p = 0; // EXC_BAD_ACCESS } return r; }
  10. 10. hello.rb p "Hello, world!" r = Random.new(1) (1..6).each do |i| p r.russian_roulette end
  11. 11. Result
  12. 12. もう少し複雑な例 ● ngx_mruby https://qiita.com/takeswim/items/d80dcf9865d06571cc5e https://github.com/firewood/ngx_mruby/tree/xcode
  13. 13. ビルド方法 ● https://qiita.com/takeswim/items/d80dcf9865d06571cc5e ● https://qiita.com/marumaru/items/ca801c957986302f6fe6
  14. 14. Prepare nginx source submoduleに足してみた $ git checkout xcode $ git submodule init $ git submodule update
  15. 15. Build mruby $ ./configure --with-ngx-src-root=./nginx $ make build_mruby $ make generate_gems_config
  16. 16. Build nginx .oから.aを作るMakefileを書いた $ cd nginx $ ./auto/configure --with-debug --add-module=.. --add-module=../dependence/ngx_devel_kit -- prefix=/usr/local/nginx $ make $ cd .. $ make -f gen_lib.mk
  17. 17. Copy files $ sudo mkdir -p /usr/local/nginx/conf /usr/local/nginx/logs /usr/local/nginx/html $ sudo chown -R `whoami` /usr/local/nginx/ $ cp -a example/*.rb /usr/local/nginx/html/ $ cp -a example/nginx.conf /usr/local/nginx/conf/ $ cp -a nginx/conf/mime.types /usr/local/nginx/conf/
  18. 18. Tips ● ひとつのプロセスで処理する (ワーカープロセスを 使わない) ○ master_process off
  19. 19. Location /rr location /rr { mruby_content_handler_code ' r = Random.new Server = Nginx Server.echo r.russian_roulette '; }
  20. 20. Accessing to http://localhost:3000/rr
  21. 21. まとめ ● Xcodeは有能 ● デバッガはcode readingに使える (かも)

×