From: Rocky Bernstein Date: 2009-09-29T17:43:46+09:00 Subject: [ruby-core:25836] Re: event hook in 1.9? --001636d34f707900a80474b36995 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit The event hook definitely works. The TODO relates I think to setting *id* and *klass* which I what 1.8 does. *begin long discussion which most may want to ignore:** * That said, in my view I don't believe it necessary to ever fill this out. Instead what I'd rather see is the event hook call interface *simplified*. Right now it is a trace function call looks like: *trace_function(event, file, line, id, bind, klass) * What I've been using in an experimental debugger is: *trace_function(event, frame, arg=nil) * From *frame* you can figure out *file*, *line*, *id*, *bind* and so on. I was thinking that in the replacement call *arg* would be a placeholder for any event where it may be desirable to pass more information. For example the return value in a function or perhaps exception information in a raise. I think this is how Python does it in their trace hook. (Right now the way I up a value about to be returned is by just retrieving the value from the VM stack which is very YARV specific). As for *file* and *line*, I find this a little weird. The intent clearly is to indicate a source position of where you are at when the event triggers. But even though there are two (unnecessary in my opinion) parameters, it still falls short of being specific and general. "file" sometimes might not be a file if say you are running the internal_prelude in a require ;-) So I use a notion of a "container" which is a two part thing: one part is something like a locator ("file") and the other the object in which that locator lives. Many times the locator is a "file" inside say a filesystem, but it could be a string variable passed to *eval* or *RubyVM::InstructionSequenceCompile. * So here it may be helpful say in a debugger or trace hook routine to know not only the position of the text inside that variable but perhaps the location of the eval. That way you could set the frame to be the context of the eval on the call stack and pick up the full source text of the eval which by the way doesn't appear in SCRIPT_LINES__. In Python where packages can be bundled inside "egg" files and sometimes compressed, you might want to indicate that "file" is not in a filesystem but inside this bundled file. And as for "line", well, in the general case I think one wants again a two-part thing: both a start position and and end position which would be a starting "line" offset and a character offset within that and then an ending line and an ending-line character offset. Right now I don't believe Ruby will ever allow a compilation to start in one container (or "file") and end in another, so repeating the "file" part on the end is not needed. However in the presence of optimization, it is conceivable that instructions or source code fragments from different "lines" get combined. So in fact there may be *several* sets of positions for say a given VM instruction or stopping place. So what I have here is an unstructured array of "positions", each position being in general a two part thingy, but for now I just have a single Fixnum "line". Some of these thoughts I have documented in http://github.com/rocky/rb-threadframe/blob/master/threadframe.rd which is in need of update. On Tue, Sep 29, 2009 at 3:21 AM, Ryan Davis wrote: > /** >> @c setting >> @e trace >> @j trace 用の命令。 >> */ >> DEFINE_INSN >> trace >> (rb_num_t nf) >> () >> () >> { >> rb_event_flag_t flag = (rb_event_flag_t)nf; >> >> EXEC_EVENT_HOOK(th, flag, GET_SELF(), 0, 0 /* TODO: id, klass */); >> } >> > > Am I missing something? Does this TODO imply that the event hook mechanism > isn't supposed to work yet? > > > --001636d34f707900a80474b36995 Content-Type: text/html; charset=ISO-2022-JP Content-Transfer-Encoding: base64 VGhlIGV2ZW50IGhvb2sgZGVmaW5pdGVseSB3b3Jrcy4gPGJyPjxicj5UaGUgVE9ETyByZWxhdGVz IEkgdGhpbmsgdG8gc2V0dGluZyA8aT5pZDwvaT4gYW5kIDxpPmtsYXNzPC9pPiB3aGljaCBJIHdo YXQgMS44IGRvZXMuIDxicj48YnI+PGI+YmVnaW4gbG9uZyBkaXNjdXNzaW9uIHdoaWNoIG1vc3Qg bWF5IHdhbnQgdG8gaWdub3JlOjwvYj48aT48YnI+PC9pPjxicj5UaGF0IHNhaWQsIGluIG15IHZp ZXcgSSBkb24mIzM5O3QgYmVsaWV2ZSBpdCBuZWNlc3NhcnkgdG8gZXZlciBmaWxsIHRoaXMgb3V0 LiBJbnN0ZWFkIHdoYXQgSSYjMzk7ZCByYXRoZXIgc2VlIGlzIHRoZSBldmVudCBob29rIGNhbGwg aW50ZXJmYWNlIDxpPnNpbXBsaWZpZWQ8L2k+Ljxicj4KPGJyPlJpZ2h0IG5vdyBpdCBpcyBhIHRy YWNlIGZ1bmN0aW9uIGNhbGwgbG9va3MgbGlrZTogPGJyPiZuYnNwOyA8aT50cmFjZV9mdW5jdGlv bihldmVudCwgZmlsZSwgbGluZSwgaWQsIGJpbmQsIGtsYXNzKTxicj48L2k+PGJyPldoYXQgSSYj Mzk7dmUgYmVlbiB1c2luZyBpbiBhbiBleHBlcmltZW50YWwgZGVidWdnZXIgaXM6PGJyPiZuYnNw OyZuYnNwOyA8aT50cmFjZV9mdW5jdGlvbihldmVudCwgZnJhbWUsIGFyZz1uaWwpPGJyPgo8L2k+ PGJyPkZyb20gPGk+ZnJhbWU8L2k+IHlvdSBjYW4gZmlndXJlIG91dCA8aT5maWxlPC9pPiwgPGk+ bGluZTwvaT4sIDxpPmlkPC9pPiwgPGk+YmluZDwvaT4gYW5kIHNvIG9uLiBJIHdhcyB0aGlua2lu ZyB0aGF0IGluIHRoZSByZXBsYWNlbWVudCBjYWxsIDxpPmFyZzwvaT4gd291bGQgYmUgYSBwbGFj ZWhvbGRlciBmb3IgYW55IGV2ZW50IHdoZXJlIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gcGFzcyBt b3JlIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSB0aGUgcmV0dXJuIHZhbHVlIGluIGEgZnVuY3Rp b24gb3IgcGVyaGFwcyBleGNlcHRpb24gaW5mb3JtYXRpb24gaW4gYSByYWlzZS4gSSB0aGluayB0 aGlzIGlzIGhvdyBQeXRob24gZG9lcyBpdCBpbiB0aGVpciB0cmFjZSBob29rLjxicj4KPGJyPihS aWdodCBub3cgdGhlIHdheSBJIHVwIGEgdmFsdWUgYWJvdXQgdG8gYmUgcmV0dXJuZWQgaXMgYnkg anVzdCByZXRyaWV2aW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSBWTSBzdGFjayB3aGljaCBpcyB2ZXJ5 IFlBUlYgc3BlY2lmaWMpLiA8YnI+PGJyPkFzIGZvciA8aT5maWxlPC9pPiBhbmQgPGk+bGluZTwv aT4sIEkgZmluZCB0aGlzIGEgbGl0dGxlIHdlaXJkLiBUaGUgaW50ZW50IGNsZWFybHkgaXMgdG8g aW5kaWNhdGUgYSBzb3VyY2UgcG9zaXRpb24gb2Ygd2hlcmUgeW91IGFyZSBhdCB3aGVuIHRoZSBl dmVudCB0cmlnZ2Vycy4gQnV0IGV2ZW4gdGhvdWdoIHRoZXJlIGFyZSB0d28gKHVubmVjZXNzYXJ5 IGluIG15IG9waW5pb24pIHBhcmFtZXRlcnMsIGl0IHN0aWxsIGZhbGxzIHNob3J0IG9mIGJlaW5n IHNwZWNpZmljIGFuZCBnZW5lcmFsLjxicj4KPGJyPiZxdW90O2ZpbGUmcXVvdDsgc29tZXRpbWVz IG1pZ2h0IG5vdCBiZSBhIGZpbGUgaWYgc2F5IHlvdSBhcmUgcnVubmluZyB0aGUgaW50ZXJuYWxf cHJlbHVkZSBpbiBhIHJlcXVpcmUgOy0pPGJyPlNvIEkgdXNlIGEgbm90aW9uIG9mIGEmbmJzcDsg JnF1b3Q7Y29udGFpbmVyJnF1b3Q7IHdoaWNoIGlzIGEgdHdvIHBhcnQgdGhpbmc6IG9uZSBwYXJ0 IGlzIHNvbWV0aGluZyBsaWtlIGEgbG9jYXRvciAoJnF1b3Q7ZmlsZSZxdW90OykgYW5kIHRoZSBv dGhlciB0aGUgb2JqZWN0IGluIHdoaWNoIHRoYXQgbG9jYXRvciBsaXZlcy4gTWFueSB0aW1lcyB0 aGUgbG9jYXRvciBpcyBhICZxdW90O2ZpbGUmcXVvdDsgaW5zaWRlIHNheSBhIGZpbGVzeXN0ZW0s Jm5ic3A7IGJ1dCBpdCBjb3VsZCBiZSBhIHN0cmluZyB2YXJpYWJsZSBwYXNzZWQgdG8gPGk+ZXZh bDwvaT4gb3IgPGk+UnVieVZNOjpJbnN0cnVjdGlvblNlcXVlbmNlQ29tcGlsZS4gPC9pPjxicj4K Jm5ic3A7PGJyPlNvIGhlcmUgaXQgbWF5IGJlIGhlbHBmdWwgc2F5IGluIGEgZGVidWdnZXIgb3Ig dHJhY2UgaG9vayByb3V0aW5lIHRvIGtub3cgbm90IG9ubHkgdGhlIHBvc2l0aW9uIG9mIHRoZSB0 ZXh0IGluc2lkZSB0aGF0IHZhcmlhYmxlIGJ1dCBwZXJoYXBzIHRoZSBsb2NhdGlvbiBvZiB0aGUg ZXZhbC4gVGhhdCB3YXkgeW91IGNvdWxkIHNldCB0aGUgZnJhbWUgdG8gYmUgdGhlIGNvbnRleHQg b2YgdGhlIGV2YWwgb24gdGhlIGNhbGwgc3RhY2sgYW5kIHBpY2sgdXAgdGhlIGZ1bGwgc291cmNl IHRleHQgb2YgdGhlIGV2YWwgd2hpY2ggYnkgdGhlIHdheSBkb2VzbiYjMzk7dCBhcHBlYXIgaW4g U0NSSVBUX0xJTkVTX18uPGJyPgo8YnI+SW4gUHl0aG9uIHdoZXJlIHBhY2thZ2VzIGNhbiBiZSBi dW5kbGVkIGluc2lkZSAmcXVvdDtlZ2cmcXVvdDsgZmlsZXMgYW5kIHNvbWV0aW1lcyBjb21wcmVz c2VkLCZuYnNwOyB5b3UgbWlnaHQgd2FudCB0byBpbmRpY2F0ZSB0aGF0ICZxdW90O2ZpbGUmcXVv dDsgaXMgbm90IGluIGEgZmlsZXN5c3RlbSBidXQgaW5zaWRlIHRoaXMgYnVuZGxlZCBmaWxlLiA8 YnI+PGJyPkFuZCBhcyBmb3IgJnF1b3Q7bGluZSZxdW90Oywgd2VsbCwgaW4gdGhlIGdlbmVyYWwg Y2FzZSBJIHRoaW5rIG9uZSB3YW50cyBhZ2FpbiBhIHR3by1wYXJ0IHRoaW5nOiBib3RoIGEgc3Rh cnQgcG9zaXRpb24gYW5kIGFuZCBlbmQgcG9zaXRpb24gd2hpY2ggd291bGQgYmUgYSBzdGFydGlu ZyAmcXVvdDtsaW5lJnF1b3Q7IG9mZnNldCBhbmQgYSBjaGFyYWN0ZXIgb2Zmc2V0IHdpdGhpbiB0 aGF0IGFuZCB0aGVuIGFuIGVuZGluZyBsaW5lIGFuZCBhbiBlbmRpbmctbGluZSBjaGFyYWN0ZXIg b2Zmc2V0LiBSaWdodCBub3cgSSBkb24mIzM5O3QgYmVsaWV2ZSBSdWJ5IHdpbGwgZXZlciBhbGxv dyBhIGNvbXBpbGF0aW9uIHRvIHN0YXJ0IGluIG9uZSBjb250YWluZXIgKG9yICZxdW90O2ZpbGUm cXVvdDspIGFuZCBlbmQgaW4gYW5vdGhlciwgc28gcmVwZWF0aW5nIHRoZSAmcXVvdDtmaWxlJnF1 b3Q7IHBhcnQgb24gdGhlIGVuZCBpcyBub3QgbmVlZGVkLiA8YnI+Cjxicj5Ib3dldmVyIGluIHRo ZSBwcmVzZW5jZSBvZiBvcHRpbWl6YXRpb24sIGl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgaW5zdHJ1 Y3Rpb25zIG9yIHNvdXJjZSBjb2RlIGZyYWdtZW50cyBmcm9tIGRpZmZlcmVudCAmcXVvdDtsaW5l cyZxdW90OyBnZXQgY29tYmluZWQuIFNvIGluIGZhY3QgdGhlcmUgbWF5IGJlIDxpPnNldmVyYWw8 L2k+IHNldHMgb2YgcG9zaXRpb25zIGZvciBzYXkgYSBnaXZlbiBWTSBpbnN0cnVjdGlvbiBvciBz dG9wcGluZyBwbGFjZS4mbmJzcDsgU28gd2hhdCBJIGhhdmUgaGVyZSBpcyBhbiB1bnN0cnVjdHVy ZWQgYXJyYXkgb2YgJnF1b3Q7cG9zaXRpb25zJnF1b3Q7LCBlYWNoIHBvc2l0aW9uIGJlaW5nIGlu IGdlbmVyYWwgYSB0d28gcGFydCB0aGluZ3ksIGJ1dCBmb3Igbm93IEkganVzdCBoYXZlIGEgc2lu Z2xlIEZpeG51bSAmcXVvdDtsaW5lJnF1b3Q7LiA8YnI+Cjxicj5Tb21lIG9mIHRoZXNlIHRob3Vn aHRzIEkgaGF2ZSBkb2N1bWVudGVkIGluJm5ic3A7IDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29t L3JvY2t5L3JiLXRocmVhZGZyYW1lL2Jsb2IvbWFzdGVyL3RocmVhZGZyYW1lLnJkIj5odHRwOi8v Z2l0aHViLmNvbS9yb2NreS9yYi10aHJlYWRmcmFtZS9ibG9iL21hc3Rlci90aHJlYWRmcmFtZS5y ZDwvYT4gd2hpY2ggaXMgaW4gbmVlZCBvZiB1cGRhdGUuPGJyPgo8YnI+PGRpdiBjbGFzcz0iZ21h aWxfcXVvdGUiPk9uIFR1ZSwgU2VwIDI5LCAyMDA5IGF0IDM6MjEgQU0sIFJ5YW4gRGF2aXMgPHNw YW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86cnlhbmQtcnVieUB6ZW5zcGlkZXIuY29t Ij5yeWFuZC1ydWJ5QHplbnNwaWRlci5jb208L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjxibG9j a3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9ImJvcmRlci1sZWZ0OiAxcHggc29saWQg cmdiKDIwNCwgMjA0LCAyMDQpOyBtYXJnaW46IDBwdCAwcHQgMHB0IDAuOGV4OyBwYWRkaW5nLWxl ZnQ6IDFleDsiPgo8YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJib3JkZXIt bGVmdDogMXB4IHNvbGlkIHJnYigyMDQsIDIwNCwgMjA0KTsgbWFyZ2luOiAwcHQgMHB0IDBwdCAw LjhleDsgcGFkZGluZy1sZWZ0OiAxZXg7Ij4KLyoqPGJyPgogJm5ic3A7QGMgc2V0dGluZzxicj4K ICZuYnNwO0BlIHRyYWNlPGJyPgogJm5ic3A7QGogdHJhY2UgGyRCTVEkTkw/TmEhIxsoQjxicj4K Jm5ic3A7Ki88YnI+CkRFRklORV9JTlNOPGJyPgp0cmFjZTxicj4KKHJiX251bV90IG5mKTxicj4K KCk8YnI+CigpPGJyPgp7PGJyPgogJm5ic3A7ICZuYnNwO3JiX2V2ZW50X2ZsYWdfdCBmbGFnID0g KHJiX2V2ZW50X2ZsYWdfdCluZjs8YnI+Cjxicj4KICZuYnNwOyAmbmJzcDtFWEVDX0VWRU5UX0hP T0sodGgsIGZsYWcsIEdFVF9TRUxGKCksIDAsIDAgLyogVE9ETzogaWQsIGtsYXNzICovKTs8YnI+ Cn08YnI+CjwvYmxvY2txdW90ZT4KPGJyPgpBbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBEb2VzIHRo aXMgVE9ETyBpbXBseSB0aGF0IHRoZSBldmVudCBob29rIG1lY2hhbmlzbSBpc24mIzM5O3Qgc3Vw cG9zZWQgdG8gd29yayB5ZXQ/PGJyPgo8YnI+Cjxicj4KPC9ibG9ja3F1b3RlPjwvZGl2Pjxicj4K --001636d34f707900a80474b36995--