Help us understand the problem. What is going on with this article?

mrubyのデバッグがしづらい問題をなんとかしたい

More than 3 years have passed since last update.

この記事は、mruby Advent Calendar 2016の12日目の記事です。
遅れてしまって申し訳ありません><

mrubyを使い始めて3ヶ月ぐらいです。
mruby-cliでサーバー上で動くバイナリを作っています。
C側にはまだあまり手を出せてないですが、今作っているものは.rbファイルだけでも20ファイルを超えて、ちょっとした規模になってきました。

せっかくmrubyスクリプトでバイナリを作れるのに、デバッグがしづらいなぁというのが今持っている印象です。
そこで、デバッグの方法としてどういった手段があるのかをまとめるとともに、あわよくば皆さんがどうしているのかを伺えれば、という思いで書いてみました。
ここでは、デバッグの対象はmrubyスクリプトのみとします。

printデバッグ

基本でお手軽。
ただ効率としては決して良くはない。

mrdb

http://forum.mruby.org/docs/dmanual.html
mruby公式のデバッグ機能。
ブレークポイントを設定できたり、ステップ実行できたりと魅力的な機能があります。
が、mrubyスクリプト(.rb)、もしくはそれをコンパイルしたバイナリファイル(.mrb)単品のデバッグしかできないっぽい。
なのでmruby-cliで作ったようなバイナリをデバッグするのはできない…のかな?

nomitory

http://magazine.rubyist.net/?0050-nomitory
Eclipseのプラグインで、GUIでブレークポイントを設定できたりするらしい。
試してないけど、Eclipseというところでちょっと乗り気じゃない。

mirb

バイナリとともに生成されるmirbには、使用しているmrbgemsや自作のコードも含まれています。
なので、そのあたりのクラスなどの挙動の確認するのに便利なケースがあります。

ロガークラスを作る

print文を書いて消してしなくていいように、ロガークラスを作りました。コード中に書きっぱなしでも普段は機能しなくて、実行時に引数でデバッグモードを指定してやった場合にだけファイルにログを書き出すやつです。
処理の主要な部分と、例外発生時に来る部分とに入れておけば、比較的早く原因箇所が特定できます。
まだ作りが粗いので、整理してmrbgem化したい。

例外情報をAWS S3に上げてみる

デバッグというか、運用面を考えてのことですが、
例外発生時にAWSのS3に情報を上げる仕組みを作ってみました。
今は上げてるだけだけど、これをトリガーにしてslackに通知とかもできるはず。
ただ、本番環境で動いているものはビルド時にデバッグオプションを付けていないので、あまり情報量はない。。

まとめ

今のところ自分が把握している/用意した手段はこのぐらいです。
ロガー作ったあたりから比較的楽になった気もしますが、もっといい方法が無いかと模索中です。

みなさんどうされているか、ご教授いただけると幸いです!

Kta-M
fusic
受託開発・自社サービスの2本柱で「日本を代表する福岡の企業」を目指している企業です。
https://fusic.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした