スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Eclipse(Aptana3) で Ruby1.9.3 をデバッグする

Eclipse(Aptana3) で Ruby1.9.3 をデバッグする



Windows7 です。

[1] Ruby1.9.3をインストール。ダウンロードはここから。
(※もし将来DevKitが必要になったら「DEVELOPMENT KIT」のダウンロードもここから。)

ruby --version
ruby 1.9.3p0 (2011-10-30) [i386-mingw32]



[2] bundler をインストールしておきます。コマンドプロンプトで
gem install bundler



[3] さて、Eclipseでデバッグするには以下のGemが必要です。
linecache19
ruby-debug-base19
ruby-debug-ide19


「gem install」一発でインストールできれば、このブログは書かなかったわけで。。。

まず、以下のURLから linecache19 と ruby-debug-base19 をダウンロード。
http://rubyforge.org/frs/download.php/75414/linecache19-0.5.13.gem
http://rubyforge.org/frs/download.php/75415/ruby-debug-base19-0.11.26.gem

そして、インストール。
gem install linecache19-0.5.13.gem
gem install ruby-debug-base19-0.11.26.gem -- --with-ruby-include=[[c:\ruby193]]/include/ruby-1.9.1/ruby-1.9.3-p0
(※ここで、[[c:\ruby193]] は、あなたがRuby1.9.3をインストールしたディレクトリ。)

詳しくは http://d.hatena.ne.jp/kurizo/20111225/p1を参照。


[4] ruby-debug-ide19 は普通にインストール
gem install ruby-debug-ide19


これで Eclipse でデバッグモードで実行できる。


[5] しかし、ブレークポイントで止めようとすると以下のエラー
Exception in DebugThread loop: undefined method `is_binary_data?' for "#":String

困ります。。。

同じように困っている人が StackOverflowにいましたので、回答を返しておきました。
Aptana 3 ruby debugger - Exception in DebugThread loop: undefined method `is_binary_data?'

原因は、String#is_binary_data? という関数が Ruby1.9.3 では削除されているためのようですね。
http://apidock.com/ruby/String/is_binary_data%3F

問題の箇所は、ruby-debug-ide19-0.4.12 の xml_printer.rb
  value_str = "[Binary Data]" if value_str.is_binary_data?
print("",
CGI.escapeHTML(name), kind, CGI.escapeHTML(value_str), value.class,
has_children, value.respond_to?(:object_id) ? value.object_id : value.id)



なので、以下のコードを、適当な場所(あなたのコード)に追加します。
class String
def is_binary_data?
( self.count( "^ -~", "^\r\n" ).fdiv(self.size) > 0.3 || self.index( "\x00" ) ) unless empty?
end
end


これで、ブレークポイントが使えるようになりました。やれやれ。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

承認待ちコメント

このコメントは管理者の承認待ちです
検索フォーム
RSSリンクの表示
リンク
exabugsをフォローしましょう
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。