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

RubyMine 2018.1 でブレークポイントデバッグがうまく動かない場合

More than 1 year has passed since last update.

概要

RubyMine (2018.1) で Rails 5.2.0 のプロジェクトをブレークポイントでデバッグしようとしたら、なんかうまく動作しませんでした。

  • デバッグモード起動時にブレークポイントをミュートしないと動作しない
  • デバッグ中につけ直したブレークポイントで正しく停止しない
  • Pow を経由させてリモートデバッグにすると直る

Web の記事を調査すると「簡単にデバッグできてびっくりです!」みたいなことしか書いてなく、発狂しそうになったのでいろいろと調査した。

解決方法

前提

一通りの gem はインストールされているものとします。

console
$ gem install ruby-debug-ide
$ gem install debase

RubyMine でデバッグを行う場合 Gemfile への追記は必須ではありません。

Rails 5.2.0 のプロジェクトを RubyMine で開く

ターミナルで $ rails new hoge した後、それを RubyMine の「プロジェクトを開く」で開く。

デバッグの構成を編集する

Run > Debug > Edit configurations (日本語化している場合は実行 > デバッグ > 構成の編集) で、開いたプロジェクトの構成画面を開く。

予め存在している Rails プロジェクトを開いた場合は諸々自動的に設定されていると思うので、以下の箇所だけを追加する。

Environment variables (日本語だと環境変数) の [...] をクリックし、[+] ボタンで以下のように DEBUG_MODE=true を追加

env.png

このようになっていればOK。他は変えなくてよい。

スクリーンショット 2018-06-06 9.18.08.png

config/boot.rb を編集する

config/boot.rb
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)

require 'bundler/setup' # Set up gems listed in the Gemfile.
require 'bootsnap/setup' # Speed up boot time by caching expensive operations.

デフォルトであればこのようになっていると思うので、以下のようにする。

config/boot.rb
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)

require 'bundler/setup' # Set up gems listed in the Gemfile.
require 'bootsnap/setup' unless ENV['DEBUG_MODE'] # Speed up boot time by caching expensive operations.

require 'bootsnap/setup' unless ENV['DEBUG_MODE'] となる。

要するに Rails 起動時の処理を最適化している bootsnap とブレークボイントデバッグで利用される debase の相性問題ということなのではないかと思うんだけど、詳しくは調べていない。

ENV['DEBUG_MODE'] は development 環境下のみで利用するとしておけば、この状態でコミットしても特に問題はないかと思う。

RubyMine でコードにブレークポイントを設定する

スクリーンショット 2018-06-06 9.24.28.png

デバッグを実行

スクリーンショット 2018-06-06 9.25.02.png

デバッグボタンでなくても Ctrl+D とかで大丈夫です。デバッグのコンソール表示が以下のようになればOK。

スクリーンショット 2018-06-06 9.26.20.png

ブラウザで該当のブレークポイントを通過させる

0.0.0.0:3000 となっていますが localhost:3000 でも動作しました。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3137333433332f63646137386265342d376563372d363230652d333135342d3834303331346465323062322e706e67.png

静止画だとちょっと分かりづらいかもしれませんが見事に止まっています(止まるとウィンドウフォーカスが RubyMine に移るので、それでわかる)。

rubymine-debug.mov.gif

こんな感じで、デバッグの途中にブレークポイントを付け替えても動作します。当たり前かもしれないんですが、bootsnap を対策しない状態だとこれがうまく動作しませんでした。

まとめ

RubyMine で Rails 5.2.0 のデバッグがうまく動かない場合は bootsnap の有無を ENV で切り替える必要がありそうです。

参考

Rubymine breakpoints no longer working after upgrading Ruby to 2.5.0 - GitHub

ktrkmk
頑張ってください 案件の依頼をご検討中の方へ https://b1ac1cc0ffee.hateblo.jp/entry/2018/05/23/172100
https://b1ac1cc0ffee.hateblo.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
ユーザーは見つかりませんでした