From: Charlie Savage Date: 2006-06-23T07:05:46+09:00 Subject: Re: ruby-prof-0.4.0 --------------ms020203040908090301040308 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Mauricio, > ... and found what is causing the problem. rcov's tests do something like: > > batsman@tux-chan:~/mess/current$ cat ruby-prof-bomb.rb > str = %{module Foo; class Bar; def foo; end end end} > eval str > Foo::Bar.new.foo > Object.class_eval{ remove_const :Foo } > eval str > Foo::Bar.new.foo Interesting, I never would have thought of that. Your patch looks fine - I've applied it with a slight modification. Results will now be output like this: Foo::Bar#foo Foo::Bar#foo_1 Foo::Bar#foo_2 Foo::Bar#foo_3 etc... So you can tell the different calls apart. > ruby_prof seems to work now, and there are two separate entries in the call > graph for Foo::Bar#foo (see the attached ruby-prof-out-ok.txt). I think > keeping them that way, as opposed to consolidating them, makes sense, since > they could have been entirely different methods. Yeah, agreed, and now you can tell the apart with the naming scheme. > Before I forget, a minor nitpick }:) > Could you release a tarball through Rubyforge, in addition to the RubyGems > packages? Some systems like FreeBSD's ports are happier when there's an > online accessible tarball. Other repackagers will appreciate too. Done. gem update to get ruby-prof-0.4.1. There is also a new RubyProf.running? method requested by David Schmidt. Thanks for the feedback and patch, Charlie P.S. Sent you a separate email yesterday, not sure if you received it? > > > > ------------------------------------------------------------------------ > > $ cat ruby-prof-bomb2.rb > str = %{module Foo; class Bar; def foo; end end end} > eval str > Foo::Bar.new.foo > Object.class_eval{ remove_const :Foo } > eval str > Foo::Bar.new.foo > Foo::Bar.new.foo > > $ ruby-prof -p graph ruby-prof-bomb2.rb > Thread ID: -605342748 > %total %self total self children calls Name > -------------------------------------------------------------------------------- > 0.00% 0.00% 0.00 0.00 0.00 1 #toplevel > 0.00 0.00 0.00 1/1 Kernel#load > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 2/2 Kernel#load > 0.00% 0.00% 0.00 0.00 0.00 2 Foo::Bar#foo > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 3/3 Class#new > 0.00% 0.00% 0.00 0.00 0.00 3 Object#initialize > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 1/1 Kernel#load > 0.00% 0.00% 0.00 0.00 0.00 1 Module#class_eval > 0.00 0.00 0.00 1/1 Module#remove_const > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 2/2 Kernel#load > 0.00% 0.00% 0.00 0.00 0.00 2 Kernel#eval > 0.00 0.00 0.00 2/2 Module#method_added > 0.00 0.00 0.00 2/2 Class#inherited > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 1/1 Module#class_eval > 0.00% 0.00% 0.00 0.00 0.00 1 Module#remove_const > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 2/2 Kernel#eval > 0.00% 0.00% 0.00 0.00 0.00 2 Class#inherited > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 2/2 Kernel#eval > 0.00% 0.00% 0.00 0.00 0.00 2 Module#method_added > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 1/1 Kernel#load > 0.00% 0.00% 0.00 0.00 0.00 1 Foo::Bar#foo > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 1/1 #toplevel > 0.00% 0.00% 0.00 0.00 0.00 1 Kernel#load > 0.00 0.00 0.00 1/2 Foo::Bar#foo > 0.00 0.00 0.00 2/2 Kernel#eval > 0.00 0.00 0.00 1/1 Module#class_eval > 0.00 0.00 0.00 3/3 Class#new > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 3/3 Kernel#load > 0.00% 0.00% 0.00 0.00 0.00 3 Class#new > 0.00 0.00 0.00 3/3 #allocate > 0.00 0.00 0.00 3/3 Object#initialize > -------------------------------------------------------------------------------- > 0.00 0.00 0.00 3/3 Class#new > 0.00% 0.00% 0.00 0.00 0.00 3 #allocate --------------ms020203040908090301040308 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJAzCC AtwwggJFoAMCAQICEFby1ChIT+pmYLkFBWX20TIwDQYJKoZIhvcNAQEEBQAwYjELMAkGA1UE BhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMT I1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA2MDUxMzIyNTQyM1oX DTA3MDUxMzIyNTQyM1owQzEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1lbWJlcjEgMB4G CSqGSIb3DQEJARYRY2Zpc0BzYXZhZ2V4aS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQDDPyi9Z2s8673fAOxX6/EhWhAo2bb8/BcU7xiV49a9TWExEAufzQuAKvKdRWlm MKuTwdU/QKgrZ1bCcb3cIznHjFI5AmG4nkqUMzqzgzPDDwbiE6AXYXzdd+efDF1mVUQJF/nm N26xC576KC3e+T1jK2n4DosnIxqQlTVH02huREgMrnPDR82susVvtKa3BV1xx1Fm1+8qkISp 4Ym8LaBQ72nH879OFLHeH/1oP4FAp7qfZAWtlse8mSajhHN6mAH+wFUOG1yrNsM2mKVVAhIv ByolY+VTa9RBWXgvOhdmJyQd56fag85/zaUjQfUChiYBmx4IWVbc9TKtcx6btDxrAgMBAAGj LjAsMBwGA1UdEQQVMBOBEWNmaXNAc2F2YWdleGkuY29tMAwGA1UdEwEB/wQCMAAwDQYJKoZI hvcNAQEEBQADgYEAeCTsNZ/SvrF8JPbFBychryTZlDzu415g2JQDaPa9+gBFaMpWvsE/rzNO 2nBhz4nXayb8QQMA5+RjTavo/fEmittd2ZjNYItA7glkw0R01kmf/ZEWehLQrVoQ5bbKycED giA0ykm/936Gzin+RrXwYc9qp5CGawWFj7ceOqmUv8owggLcMIICRaADAgECAhBW8tQoSE/q ZmC5BQVl9tEyMA0GCSqGSIb3DQEBBAUAMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3 dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJl ZW1haWwgSXNzdWluZyBDQTAeFw0wNjA1MTMyMjU0MjNaFw0wNzA1MTMyMjU0MjNaMEMxHzAd BgNVBAMTFlRoYXd0ZSBGcmVlbWFpbCBNZW1iZXIxIDAeBgkqhkiG9w0BCQEWEWNmaXNAc2F2 YWdleGkuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwz8ovWdrPOu93wDs V+vxIVoQKNm2/PwXFO8YlePWvU1hMRALn80LgCrynUVpZjCrk8HVP0CoK2dWwnG93CM5x4xS OQJhuJ5KlDM6s4Mzww8G4hOgF2F83XfnnwxdZlVECRf55jdusQue+igt3vk9Yytp+A6LJyMa kJU1R9NobkRIDK5zw0fNrLrFb7SmtwVdccdRZtfvKpCEqeGJvC2gUO9px/O/ThSx3h/9aD+B QKe6n2QFrZbHvJkmo4RzepgB/sBVDhtcqzbDNpilVQISLwcqJWPlU2vUQVl4LzoXZickHeen 2oPOf82lI0H1AoYmAZseCFlW3PUyrXMem7Q8awIDAQABoy4wLDAcBgNVHREEFTATgRFjZmlz QHNhdmFnZXhpLmNvbTAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBAUAA4GBAHgk7DWf0r6x fCT2xQcnIa8k2ZQ87uNeYNiUA2j2vfoARWjKVr7BP68zTtpwYc+J12sm/EEDAOfkY02r6P3x JorbXdmYzWCLQO4JZMNEdNZJn/2RFnoS0K1aEOW2ysnBA4IgNMpJv/d+hs4p/ka18GHPaqeQ hmsFhY+3HjqplL/KMIIDPzCCAqigAwIBAgIBDTANBgkqhkiG9w0BAQUFADCB0TELMAkGA1UE BhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl cyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJ KoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUuY29tMB4XDTAzMDcxNzAwMDAw MFoXDTEzMDcxNjIzNTk1OVowYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25z dWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJ c3N1aW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEpjxVc1X7TrnKmVoeaMB1 BHCd3+n/ox7svc31W/Iadr1/DDph8r9RzgHU5VAKMNcCY1osiRVwjt3J8CuFWqo/cVbLrzwL B+fxH5E2JCoTzyvV84J3PQO+K/67GD4Hv0CAAmTXp6a7n2XRxSpUhQ9IBH+nttE8YQRAHmQZ cmC3+wIDAQABo4GUMIGRMBIGA1UdEwEB/wQIMAYBAf8CAQAwQwYDVR0fBDwwOjA4oDagNIYy aHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVBlcnNvbmFsRnJlZW1haWxDQS5jcmwwCwYD VR0PBAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFQcml2YXRlTGFiZWwyLTEzODAN BgkqhkiG9w0BAQUFAAOBgQBIjNFQg+oLLswNo2asZw9/r6y+whehQ5aUnX9MIbj4Nh+qLZ82 L8D0HFAgk3A8/a3hYWLD2ToZfoSxmRsAxRoLgnSeJVCUYsfbJ3FXJY3dqZw5jowgT2Vfldr3 94fWxghOrvbqNOUQGls1TXfjViF4gtwhGTXeJLHTHUb/XV9lTzGCA2QwggNgAgEBMHYwYjEL MAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAq BgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAhBW8tQoSE/qZmC5 BQVl9tEyMAkGBSsOAwIaBQCgggHDMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI hvcNAQkFMQ8XDTA2MDYyMjIyMDUxNFowIwYJKoZIhvcNAQkEMRYEFOOxkzHw5+n7HjA1C/eT TGMAoYuXMFIGCSqGSIb3DQEJDzFFMEMwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0G CCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMIGFBgkrBgEEAYI3EAQxeDB2 MGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQu MSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQIQVvLUKEhP 6mZguQUFZfbRMjCBhwYLKoZIhvcNAQkQAgsxeKB2MGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQK ExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29u YWwgRnJlZW1haWwgSXNzdWluZyBDQQIQVvLUKEhP6mZguQUFZfbRMjANBgkqhkiG9w0BAQEF AASCAQBiXekFj1vc5H5QxaaJFF29tEfPdjWwOvCxVIPLvHaYBym0lVsp9TbOl9hjU0hsqZrm z0Rj08BJLzigdqNhmuu2iQeeMOmflUF4FnBvRWMz+FLOA09dbru8QqvUinplpKNPjMOtF9nd AC2DqqpvbrE7RBjYGmf8BWd70jv3NqJmhYPQQtVPpXZ/MhyVB3me7BuhThx2fliRL0oXa9RH D3ih15/H50ufFSlRPVfg/CC5Oy4vp/mtLozKZJAhZmmHq7DExb5kwqHF6BfmkKxhy1eHaxFF LCMN7qw6S9ZHJPkCnpb9sw79cynI1l09tAdSIoVBMSQvwL2BWMQbhVKzMwHxAAAAAAAA --------------ms020203040908090301040308--