[ruby-list:46621] エラー([BUG])の追いかけ方

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[ruby-list:46621] エラー([BUG])の追いかけ方

"(株)ネットフォレスト 植田裕之"
植田と申します。


 自作のスクリプトで以下のようなエラーが出るのですが、エラーメッセージが
これしかない状態で何か追いかける方法はありますでしょうか?

------------------------------------------------------------------------
/usr/lib/ruby/1.8/net/http.rb:29: [BUG] not a node 0x30 (0x7ffff4d737e0)
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
------------------------------------------------------------------------

スクリプトのどこで起きているのかと再現条件が今ひとつ分からないため、ちょっ
とお手上げ状態です。


環境は以下のようになっています。

ueda@godzilla:~/bin$ uname -a
Linux godzilla.drweb.com 2.6.26-2-amd64 #1 SMP Thu Nov 5 02:23:12 UTC 2009 x86_64 GNU/Linux
ueda@godzilla:~/bin$ cat /etc/debian_version
5.0.3
ueda@godzilla:~/bin$ ruby1.8 -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]


 何かアドバイスをいただければ幸いです。どうぞよろしくお願いいたします。


-----
株式会社ネットフォレスト            http://www.netforest.ad.jp/
Dr.Web/Vade Retro 担当 植田 裕之   [hidden email]
tel:045-663-6277 fax:045-663-6278


Reply | Threaded
Open this post in threaded view
|

[ruby-list:46780] Re: [ruby-list:46621] エラー([BUG])の追いかけ方

Moru
1. rdebugを利用する
$ ruby -rdebug /your/ruby/file

2. システムで調べる(rdebugじゃトレイスができない時)
OpenSolaris環境を使っているため詳しくは分かりませんが自分の場合、

$ truss ruby /your/ruby/file

でsys callを追いかけながら原因を調べたりします。
大体の*nix系にはアプリケーションやスクリプト実行と共に、
それがシステム側でどう動いているかを調べれるトレイスツールが同梱されているはずです。

お使いのシステムで使えるトレイスツールもお試しください。

--
Moru


2009/12/7 "(株)ネットフォレスト 植田裕之" <[hidden email]>

> 植田と申します。
>
>
> 自作のスクリプトで以下のようなエラーが出るのですが、エラーメッセージが
> これしかない状態で何か追いかける方法はありますでしょうか?
>
> ------------------------------------------------------------------------
> /usr/lib/ruby/1.8/net/http.rb:29: [BUG] not a node 0x30 (0x7ffff4d737e0)
> ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
> ------------------------------------------------------------------------
>
> スクリプトのどこで起きているのかと再現条件が今ひとつ分からないため、ちょっ
> とお手上げ状態です。
>
>
> 環境は以下のようになっています。
>
> ueda@godzilla:~/bin$ uname -a
> Linux godzilla.drweb.com 2.6.26-2-amd64 #1 SMP Thu Nov 5 02:23:12 UTC 2009
> x86_64 GNU/Linux
> ueda@godzilla:~/bin$ cat /etc/debian_version
> 5.0.3
> ueda@godzilla:~/bin$ ruby1.8 -v
> ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
>
>
> 何かアドバイスをいただければ幸いです。どうぞよろしくお願いいたします。
>
>
> -----
> 株式会社ネットフォレスト            http://www.netforest.ad.jp/
> Dr.Web/Vade Retro 担当 植田 裕之   [hidden email]
> tel:045-663-6277 fax:045-663-6278
>
>
>
Reply | Threaded
Open this post in threaded view
|

[ruby-list:46785] Re: エラー([BUG])の追いかけ方

Nakamatsu Shinji
In reply to this post by "(株)ネットフォレスト 植田裕之"
自分だったどうするか?というと -r debug を使います。

まず、
$ ruby -r debug <デバッグ対象のスクリプト>
でデバッガ上でスクリプトを起動。

デバッガの c[cont] コマンド で例外は発生している箇所を特定。

l[ist] コマンドで 例外が発生している箇所の前後のコードを確認して、
必要に応じて、変数の値を p コマンドで表示してみて確認とかやってます。

最後の手段(?)としては、エラーが発生しているライブラリ(植田さんのケースだと
/usr/lib/ruby/1.8/net/http.rb になると思います)のコードの中に直接デバッグ用の
ロジック(pメソッドで変数の値を出力)等を埋め込んで動作時の値を確認する
とかもやってます。

rubyのデバッガの使い方については、"ruby debug" で検索すればいろいろ情報が
得られると思います。

ご参考まで

2009年12月7日9:26 "(株)ネットフォレスト 植田裕之" <[hidden email]>:

> 植田と申します。
>
>
> 自作のスクリプトで以下のようなエラーが出るのですが、エラーメッセージが
> これしかない状態で何か追いかける方法はありますでしょうか?
>
> ------------------------------------------------------------------------
> /usr/lib/ruby/1.8/net/http.rb:29: [BUG] not a node 0x30 (0x7ffff4d737e0)
> ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
> ------------------------------------------------------------------------
>
> スクリプトのどこで起きているのかと再現条件が今ひとつ分からないため、ちょっ
> とお手上げ状態です。
>
>
> 環境は以下のようになっています。
>
> ueda@godzilla:~/bin$ uname -a
> Linux godzilla.drweb.com 2.6.26-2-amd64 #1 SMP Thu Nov 5 02:23:12 UTC 2009 x86_64 GNU/Linux
> ueda@godzilla:~/bin$ cat /etc/debian_version
> 5.0.3
> ueda@godzilla:~/bin$ ruby1.8 -v
> ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
>
>
> 何かアドバイスをいただければ幸いです。どうぞよろしくお願いいたします。
>
>
> -----
> 株式会社ネットフォレスト            http://www.netforest.ad.jp/
> Dr.Web/Vade Retro 担当 植田 裕之   [hidden email]
> tel:045-663-6277 fax:045-663-6278
>
>
>

--
snaka
http://sumimasen2.blogspot.com/
http://d.hatena.ne.jp/snaka72/

Reply | Threaded
Open this post in threaded view
|

[ruby-list:46786] Re: エラー([BUG])の追いかけ方

NARUSE, Yui-2
In reply to this post by "(株)ネットフォレスト 植田裕之"
成瀬です。

(2009/12/07 9:26), "(株)ネットフォレスト 植田裕之" wrote:
>  自作のスクリプトで以下のようなエラーが出るのですが、エラーメッセージが
> これしかない状態で何か追いかける方法はありますでしょうか?
>
> ------------------------------------------------------------------------
> /usr/lib/ruby/1.8/net/http.rb:29: [BUG] not a node 0x30 (0x7ffff4d737e0)
> ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
> ------------------------------------------------------------------------

まず、このエラーは Ruby の実行系あたりのバグですね。
ただ、1.8.7-p72 だと結構古いので、もしかしたら p249 では直っているかも知れません。

> スクリプトのどこで起きているのかと再現条件が今ひとつ分からないため、ちょっ
> とお手上げ状態です。

バックトレースとかは出ていないんですよね。
だとすると、net/http.rb の29行目の先頭に p caller; などと書いて、
どこから呼び出されているか見るのが楽かなぁ。

再現パターンが絞られ、かつ p249 でも発症するようでしたら教えてください。

--
NARUSE, Yui  <[hidden email]>

Reply | Threaded
Open this post in threaded view
|

[ruby-list:46790] Re: エラー([BUG])の追いかけ方

"(株)ネットフォレスト 植田裕之"
植田です。


 Moru さん、Nakamatsu Shinji さん、成瀬さん、有難うございます。特にどな
たからも返答をいただけなかったので「アホな質問だったかな?」と思いつつ、
忘れていました。


 最後にいただいた成瀬さんのメールに返信させていただきます。

> 成瀬です。
>
> (2009/12/07 9:26), "(株)ネットフォレスト 植田裕之" wrote:
> >  自作のスクリプトで以下のようなエラーが出るのですが、エラーメッセージが
> > これしかない状態で何か追いかける方法はありますでしょうか?
> >
> > ------------------------------------------------------------------------
> > /usr/lib/ruby/1.8/net/http.rb:29: [BUG] not a node 0x30 (0x7ffff4d737e0)
> > ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
> > ------------------------------------------------------------------------
>
> まず、このエラーは Ruby の実行系あたりのバグですね。

はい、それは間違いないです。同一コードを別のサーバで動かしても問題なかっ
たので...


> ただ、1.8.7-p72 だと結構古いので、もしかしたら p249 では直っているかも知れません。

 このマシンは Debian/GNU Linux 5.0 で、ruby もパッケージからインストー
ルしたものです。

ueda@hoge:~$ dpkg -l | grep ruby
ii  libreadline-ruby1.8                 1.8.7.72-3lenny1         Readline interface for Ruby 1.8
ii  libruby1.8                          1.8.7.72-3lenny1         Libraries necessary to run Ruby 1.8
ii  ruby1.8                             1.8.7.72-3lenny1         Interpreter of object-oriented scripting lan
ii  ruby1.8-dev                         1.8.7.72-3lenny1         Header files for compiling extension modules
ii  rubygems                            1.2.0-3                  package management framework for Ruby librar
ii  rubygems1.8                         1.2.0-3                  package management framework for Ruby librar

管理のお手伝いをしているマシンなので、deb パッケージ以外の方法でプログラ
ムを入れるのはチョッと難しいのです。


> > スクリプトのどこで起きているのかと再現条件が今ひとつ分からないため、ちょっ
> > とお手上げ状態です。
>
> バックトレースとかは出ていないんですよね。

はい、いきなり落ちて

/usr/lib/ruby/1.8/net/http.rb:29: [BUG] not a node 0x30 (0x7ffff4d737e0)
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]

だけ表示されます。


> だとすると、net/http.rb の29行目の先頭に p caller; などと書いて、
> どこから呼び出されているか見るのが楽かなぁ。
>
> 再現パターンが絞られ、かつ p249 でも発症するようでしたら教えてください。

了解しました。

 あの報告の後、しばらくすると症状が出なくなりました。ruby 自体は何も手
を加えていないのですが、スクリプトは少しいじりました。

 今後、再発した際には

        p caller;

を試してみます。ありがとうございました。


> 2. システムで調べる(rdebugじゃトレイスができない時)
> OpenSolaris環境を使っているため詳しくは分かりませんが自分の場合、
>
> $ truss ruby /your/ruby/file
>
> でsys callを追いかけながら原因を調べたりします。
> 大体の*nix系にはアプリケーションやスクリプト実行と共に、
> それがシステム側でどう動いているかを調べれるトレイスツールが同梱されているはずです。
>
> お使いのシステムで使えるトレイスツールもお試しください。
>
> --
> Moru

Moru さん、ありがとうございます。Linux なので strace で同様のことができ
るみたいなので、再発した際には試してみます。


-----
株式会社ネットフォレスト            http://www.netforest.ad.jp/
Dr.Web/Vade Retro 担当 植田 裕之   [hidden email]
tel:045-663-6277 fax:045-663-6278


Reply | Threaded
Open this post in threaded view
|

[ruby-list:46791] Re: [ruby-list:46790] Re: エラー([BUG])の追いかけ方

Moru
モルです。

straceがあったですね。
システム側でのトレース(truss / straceなど)は成瀬さんの仰ったruntime系のバグや誤動作を調べる時にかなり便利です。
ですが、凄い量のsystem callが発生するため毎回これを利用するのは不便かも知れませんので、一応p
callやdebugなどで調べそれじゃどうにもできない場合にのみお試しください。

自分の場合はmongrelを起動するたびにmemory crashedと見えるエラーが発生したことがあり結局trussで対応しました。

--
Moru


2010/1/18 "(株)ネットフォレスト 植田裕之" <[hidden email]>

> 植田です。
>
>
> Moru さん、Nakamatsu Shinji さん、成瀬さん、有難うございます。特にどな
> たからも返答をいただけなかったので「アホな質問だったかな?」と思いつつ、
> 忘れていました。
>
>
> 最後にいただいた成瀬さんのメールに返信させていただきます。
>
> > 成瀬です。
> >
> > (2009/12/07 9:26), "(株)ネットフォレスト 植田裕之" wrote:
> > > 自作のスクリプトで以下のようなエラーが出るのですが、エラーメッセージが
> > > これしかない状態で何か追いかける方法はありますでしょうか?
> > >
> > >
> ------------------------------------------------------------------------
> > > /usr/lib/ruby/1.8/net/http.rb:29: [BUG] not a node 0x30
> (0x7ffff4d737e0)
> > > ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
> > >
> ------------------------------------------------------------------------
> >
> > まず、このエラーは Ruby の実行系あたりのバグですね。
>
> はい、それは間違いないです。同一コードを別のサーバで動かしても問題なかっ
> たので...
>
>
> > ただ、1.8.7-p72 だと結構古いので、もしかしたら p249 では直っているかも知れません。
>
>  このマシンは Debian/GNU Linux 5.0 で、ruby もパッケージからインストー
> ルしたものです。
>
> ueda@hoge:~$ dpkg -l | grep ruby
> ii  libreadline-ruby1.8                 1.8.7.72-3lenny1         Readline
> interface for Ruby 1.8
> ii  libruby1.8                          1.8.7.72-3lenny1         Libraries
> necessary to run Ruby 1.8
> ii  ruby1.8                             1.8.7.72-3lenny1
> Interpreter of object-oriented scripting lan
> ii  ruby1.8-dev                         1.8.7.72-3lenny1         Header
> files for compiling extension modules
> ii  rubygems                            1.2.0-3                  package
> management framework for Ruby librar
> ii  rubygems1.8                         1.2.0-3                  package
> management framework for Ruby librar
>
> 管理のお手伝いをしているマシンなので、deb パッケージ以外の方法でプログラ
> ムを入れるのはチョッと難しいのです。
>
>
> > > スクリプトのどこで起きているのかと再現条件が今ひとつ分からないため、ちょっ
> > > とお手上げ状態です。
> >
> > バックトレースとかは出ていないんですよね。
>
> はい、いきなり落ちて
>
> /usr/lib/ruby/1.8/net/http.rb:29: [BUG] not a node 0x30 (0x7ffff4d737e0)
> ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
>
> だけ表示されます。
>
>
> > だとすると、net/http.rb の29行目の先頭に p caller; などと書いて、
> > どこから呼び出されているか見るのが楽かなぁ。
> >
> > 再現パターンが絞られ、かつ p249 でも発症するようでしたら教えてください。
>
> 了解しました。
>
> あの報告の後、しばらくすると症状が出なくなりました。ruby 自体は何も手
> を加えていないのですが、スクリプトは少しいじりました。
>
> 今後、再発した際には
>
>        p caller;
>
> を試してみます。ありがとうございました。
>
>
> > 2. システムで調べる(rdebugじゃトレイスができない時)
> > OpenSolaris環境を使っているため詳しくは分かりませんが自分の場合、
> >
> > $ truss ruby /your/ruby/file
> >
> > でsys callを追いかけながら原因を調べたりします。
> > 大体の*nix系にはアプリケーションやスクリプト実行と共に、
> > それがシステム側でどう動いているかを調べれるトレイスツールが同梱されているはずです。
> >
> > お使いのシステムで使えるトレイスツールもお試しください。
> >
> > --
> > Moru
>
> Moru さん、ありがとうございます。Linux なので strace で同様のことができ
> るみたいなので、再発した際には試してみます。
>
>
> -----
> 株式会社ネットフォレスト            http://www.netforest.ad.jp/
> Dr.Web/Vade Retro 担当 植田 裕之   [hidden email]
> tel:045-663-6277 fax:045-663-6278
>
>
>