Eric Promislow
2007-Jul-12 18:49 UTC
[Mechanize-users] WWW::Mechanize::Link.inspect needs some TLC
The problem: users trying to debug Mechanize apps with Komodo are finding the debugger times out once it''s loaded a web page. They don''t run into this in the ruby-debug debugger, or running in normal mode. The reason: Komodo''s debugger is graphical, which means that whenever it hits a breakpoint it automatically shows the contents of each local variable. It has a limit on how much data it will retrieve, but it currently doesn''t guard an object from loading too much data (which it should, but that''s a separate bug). I can duplicate the cause of this crash in ruby-debug as well. Here''s a sample session, with this code: require ''rubygems'' require ''mechanize'' require ''logger'' agent = WWW::Mechanize.new { |a| a.log = Logger.new("mech.log") } agent.user_agent_alias = ''Mac Safari'' page = agent.get("http://www.google.com/") search_form = page.forms.name("f").first search_form.fields.name("q").value = "bratislava tournament" search_results = agent.submit(search_form) puts search_results.body Given this ruby-debug session: bugs $ rdebug mechanize01.rb ./mechanize01.rb:1 require ''rubygems'' (rdb:1) b 11 Set breakpoint 1 at mechanize01.rb:11 (rdb:1) c Breakpoint 1 at mechanize01.rb:11 ./mechanize01.rb:11 puts search_results.body (rdb:1) p page.links[0].inspect.size 1521039 # That''s way too big, since the page is a simple google results page: (rdb:1) p page.body.size 3441 Using mechanize/inspect.rb: (rdb:1) p page.links[0].pretty_inspect "#<WWW::Mechanize::Link\n \"iGoogle\"\n \"/url?sa=p&pref=ig&pval=3&q=http://www.google.ca/ig%3Fhl%3Den&usg=AFQjCNH9TTed08sJL_DKraFsuSMDFvW1gw\">\n" (rdb:1) p page.links[0].pretty_inspect.size 138 (rdb:1) p page.inspect.size 1480219 (rdb:1) p page.pretty_inspect.size 2172 With this change: --- mechanize/inspect.rb~ 2007-07-12 10:55:20.375000000 -0700 +++ mechanize/inspect.rb 2007-07-12 11:42:58.203125000 -0700 @@ -40,6 +40,7 @@ } } end + alias :inspect :pretty_inspect end class Link @@ -49,6 +50,7 @@ q.breakable; q.pp href } end + alias :inspect :pretty_inspect end class Form lib $ I get these much better results: (rdb:1) p page.links[0].inspect.size 138 (rdb:1) p page.body.size 3441 (rdb:1) p page.inspect.size 2172 Is this patch reasonable or have I missed something? Thanks, Eric
Aaron Patterson
2007-Jul-13 16:13 UTC
[Mechanize-users] WWW::Mechanize::Link.inspect needs some TLC
On 7/12/07, Eric Promislow <ericp at activestate.com> wrote:> > The problem: users trying to debug Mechanize apps with Komodo > are finding the debugger times out once it''s loaded a web > page. They don''t run into this in the ruby-debug debugger, > or running in normal mode. > > The reason: Komodo''s debugger is graphical, which means that > whenever it hits a breakpoint it automatically shows the > contents of each local variable. It has a limit on how > much data it will retrieve, but it currently doesn''t guard > an object from loading too much data (which it should, but > that''s a separate bug). > > I can duplicate the cause of this crash in ruby-debug as > well. Here''s a sample session, with this code: > > require ''rubygems'' > require ''mechanize'' > require ''logger'' > > agent = WWW::Mechanize.new { |a| a.log = Logger.new("mech.log") } > agent.user_agent_alias = ''Mac Safari'' > page = agent.get("http://www.google.com/") > search_form = page.forms.name("f").first > search_form.fields.name("q").value = "bratislava tournament" > search_results = agent.submit(search_form) > puts search_results.body > > Given this ruby-debug session: > > bugs $ rdebug mechanize01.rb > ./mechanize01.rb:1 require ''rubygems'' > (rdb:1) b 11 > Set breakpoint 1 at mechanize01.rb:11 > (rdb:1) c > Breakpoint 1 at mechanize01.rb:11 > ./mechanize01.rb:11 puts search_results.body > (rdb:1) p page.links[0].inspect.size > 1521039 > # That''s way too big, since the page is a simple google results page: > (rdb:1) p page.body.size > 3441 > > Using mechanize/inspect.rb: > > (rdb:1) p page.links[0].pretty_inspect > "#<WWW::Mechanize::Link\n \"iGoogle\"\n \"/url?sa=p&pref=ig&pval=3&q> http://www.google.ca/ig%3Fhl%3Den&usg=AFQjCNH9TTed08sJL_DKraFsuSMDFvW1gw\ > ">\n" > (rdb:1) p page.links[0].pretty_inspect.size > 138 > (rdb:1) p page.inspect.size > 1480219 > (rdb:1) p page.pretty_inspect.size > 2172 > > With this change: > --- mechanize/inspect.rb~ 2007-07-12 10:55:20.375000000 -0700 > +++ mechanize/inspect.rb 2007-07-12 11:42:58.203125000 -0700 > @@ -40,6 +40,7 @@ > } > } > end > + alias :inspect :pretty_inspect > end > > class Link > @@ -49,6 +50,7 @@ > q.breakable; q.pp href > } > end > + alias :inspect :pretty_inspect > end > > class Form > lib $ > > I get these much better results: > > (rdb:1) p page.links[0].inspect.size > 138 > (rdb:1) p page.body.size > 3441 > (rdb:1) p page.inspect.size > 2172 > > Is this patch reasonable or have I missed something?This patch seems reasonable. I''ll apply it and make sure the tests pass. :-) -- Aaron Patterson http://tenderlovemaking.com/ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/mechanize-users/attachments/20070713/92713504/attachment.html