--00221532c7188dd6190466394349 Content-Type: multipart/alternative; boundary=00221532c7188dd6100466394347 --00221532c7188dd6100466394347 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit It's been quiet in ruby-core. Recently I've looking at introspection, tracing and writing a new debugger for Ruby 1.9. Here are two little extensions to some existing functions that I think will help in tracing and writing a debugger. 1. set_trace_func(). Right now set_trace_func() takes a function name. Internally though the C code sets a trace mask to an event type to trigger (TRACE_MASK_ALL). It is helpful sometimes to pass a more selective mask. One possible approach is to add this as an optional parameter. In the attached patch this is done. However in the patch the optional parameter is a Fixnum. I realize it might be nicer if the mask could be instead set or a list of string event names. Since the change is in C code, and I prefer to write Ruby, the way I'd suggest doing this is some outside Ruby code that accomplishes this. Perhaps it could be added to tracer.rb Not in the patch but something one may want to do is have a routine to change the mask. 2. binding() One of the things one wants to do in a debugger is to change the frame in which to evaluate expressions. For this, ruby-debug adds Kernel#binding_n. However, wouldn't it be nicer to just extend binding to allow an optional level parameter (defaulting to 0) that returns a binding for the context frame of the nth caller? Again this seems pretty simple to do in the existing C code. --00221532c7188dd6100466394347 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable It's been quiet in ruby-core.<br><br>Recently I've looking at introspection, tracing and writing a new debugger for Ruby 1.9.<br><br>Here are two little extensions to some existing functions that I think will help in tracing and writing a debugger.<br> <br>1. set_trace_func(). <br><br>Right nowset_trace_func() takes a function name. Internally though the C code sets a trace mask to an event type to trigger (TRACE_MASK_ALL).It is helpful sometimes to pass a more selective mask. One possible approach is to add this as an optional parameter.<br> <br>In the attached patch this is done. However in the patch the optional parameter is a Fixnum. I realize it might be nicer if the mask could be instead set or a list of string event names. Since the change is in C code, and I prefer to write Ruby, the way I'd suggest doing this is some outside Ruby code that accomplishes this. Perhaps it could be added to tracer.rb <br> <br>Not in the patch but something one may want to do is have a routine to change the mask.<br><br>2. binding()<br><br>One of the things one wants to do in a debugger is to change the frame in which to evaluate expressions. For this, ruby-debug adds Kernel#binding_n. However, wouldn't it be nicer to just extend binding to allow an optional level parameter (defaulting to 0) that returns a binding for the context frame of the nth caller? Again this seems pretty simple to do in the existing C code. --00221532c7188dd6100466394347-- --00221532c7188dd6190466394349 Content-Type: text/x-diff; charset=US-ASCII; name="trace-mask.patch" Content-Disposition: attachment; filename="trace-mask.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fsv5ige60 LS0tCiB0ZXN0L3RyYWNlLnJiIHwgICA0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiAxIGZpbGVzIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDAg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC90cmFjZS5yYgoKZGlmZiAtLWdp dCBhL3Rlc3QvdHJhY2UucmIgYi90ZXN0L3RyYWNlLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjRlNWY1NTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3RyYWNlLnJiCkBA IC0wLDAgKzEsNDkgQEAKK3JlcXVpcmUgJ3Rlc3QvdW5pdCcKKworZGVmIHNxcih4KQorICByZXR1 cm4geCp4CitlbmQKKworZGVmIHNvbWV0aGluZygpCisgIHg9NQorICB4PTYuMiBpZiB4PT02LjEK KyAgeD03CisgIHNxcig1KQorZW5kCisKK2NsYXNzIFRlc3RUcmFjZSA8IFRlc3Q6OlVuaXQ6OlRl c3RDYXNlCisKKyAgQEBtc2dzID0gW10KKyAgZGVmIHNldHVwCisgICAgQEBtc2dzID0gW10KKyAg ZW5kCisKKyAgZGVmIHRyYWNlX2Z1bmMoZXZlbnQsIGZpbGUsIGxpbmUsIGlkLCBiaW5kaW5nLCBr bGFzcywgKikKKyAgICBAQG1zZ3MgPDwgW2V2ZW50LCBmaWxlLCBsaW5lXQorICBlbmQKKworICBk ZWYgdGVzdF90cmFjZV9mdW5jX25pbAorICAgIGFzc2VydF9lcXVhbChuaWwsIHNldF90cmFjZV9m dW5jKG5pbCksICJzZXRfdHJhY2VfZnVuYyhuaWwpIikKKyAgZW5kCisKKyAgZGVmIHRlc3RfdHJh Y2VfbWFza19hbmRfYWxsCisgICAgc2V0X3RyYWNlX2Z1bmMobWV0aG9kKDp0cmFjZV9mdW5jKS50 b19wcm9jLCAweDAwMTgpCisgICAgc29tZXRoaW5nKCkKKyAgICBzZXRfdHJhY2VfZnVuYyhuaWwp CisgICAgYXNzZXJ0X2VxdWFsKHRydWUsIAorICAgICAgICAgICAgICAgICBAQG1zZ3MuaW5qZWN0 IGRvIHxyZXN1bHQsIHRyaXBsZXwgCisgICAgICAgICAgICAgICAgICAgcmVzdWx0ICYmIFsnY2Fs bCcsICdyZXR1cm4nXS5tZW1iZXI/KHRyaXBsZVswXSkKKyAgICAgICAgICAgICAgICAgZW5kLAor ICAgICAgICAgICAgICAgICAidHJhY2UgLSBvbmx5IGNhbGwvcmV0dXJuIGV2ZW50cyIKKyAgICAg ICAgICAgICAgICAgKQorICAgIGNhbGxfcmV0dXJuX2V2ZW50X2NvdW50ID0gQEBtc2dzLnNpemUK KyAgICBzZXRfdHJhY2VfZnVuYyhtZXRob2QoOnRyYWNlX2Z1bmMpLnRvX3Byb2MpCisgICAgc29t ZXRoaW5nKCkKKyAgICBzZXRfdHJhY2VfZnVuYyhuaWwpCisgICAgYXNzZXJ0X2VxdWFsKHRydWUs IEBAbXNncy5zaXplID4gY2FsbF9yZXR1cm5fZXZlbnRfY291bnQsCisgICAgICAgICAgICAgICAg ICd0cmFjZSAtIGFsbCBldmVudHMnKQorCisgIGVuZAorZW5kCisKKwotLSAKMS41LjYuMwoKCkZy b20gOWI4MWFkOTUxYWJjZDVmMGM3MGVlMWIwMTg0NjhkZmEyODQ3NzU2MSBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKRnJvbTogcm9ja3kgPHJvY2t5QHNhbmNoZXouKG5vbmUpPgpEYXRlOiBUaHUs IDI2IE1hciAyMDA5IDAwOjExOjQ5IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIG9wdGlvbmFs IHRyYWNlLWV2ZW50IGJpdCBtYXNrIHRvIGZpbHRlciB0cmFjZSBldmVudHMKCi0tLQogdGhyZWFk LmMgfCAgIDMwICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogMSBmaWxlcyBjaGFuZ2Vk LCAyNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3RocmVhZC5j IGIvdGhyZWFkLmMKaW5kZXggMzYyNzgxMS4uYWFhZDU3MCAxMDA2NDQKLS0tIGEvdGhyZWFkLmMK KysrIGIvdGhyZWFkLmMKQEAgLTM1MDIsOCArMzUwMiw5IEBAIHN0YXRpYyB2b2lkIGNhbGxfdHJh Y2VfZnVuYyhyYl9ldmVudF9mbGFnX3QsIFZBTFVFIGRhdGEsIFZBTFVFIHNlbGYsIElEIGlkLCBW QUxVCiAKIC8qCiAgKiAgY2FsbC1zZXE6Ci0gKiAgICAgc2V0X3RyYWNlX2Z1bmMocHJvYykgICAg PT4gcHJvYwotICogICAgIHNldF90cmFjZV9mdW5jKG5pbCkgICAgID0+IG5pbAorICogICAgIHNl dF90cmFjZV9mdW5jKHByb2MpICAgICAgICA9PiBwcm9jCisgKiAgICAgc2V0X3RyYWNlX2Z1bmMo cHJvYywgbWFzaykgID0+IHByb2MKKyAqICAgICBzZXRfdHJhY2VfZnVuYyhuaWwpICAgICAgICAg PT4gbmlsCiAgKgogICogIEVzdGFibGlzaGVzIF9wcm9jXyBhcyB0aGUgaGFuZGxlciBmb3IgdHJh Y2luZywgb3IgZGlzYWJsZXMKICAqICB0cmFjaW5nIGlmIHRoZSBwYXJhbWV0ZXIgaXMgK25pbCsu IF9wcm9jXyB0YWtlcyB1cApAQCAtMzUxNyw2ICszNTE4LDggQEAgc3RhdGljIHZvaWQgY2FsbF90 cmFjZV9mdW5jKHJiX2V2ZW50X2ZsYWdfdCwgVkFMVUUgZGF0YSwgVkFMVUUgc2VsZiwgSUQgaWQs IFZBTFUKICAqICA8Y29kZT5saW5lPC9jb2RlPiAoZXhlY3V0ZSBjb2RlIG9uIGEgbmV3IGxpbmUp LCA8Y29kZT5yYWlzZTwvY29kZT4KICAqICAocmFpc2UgYW4gZXhjZXB0aW9uKSwgYW5kIDxjb2Rl PnJldHVybjwvY29kZT4gKHJldHVybiBmcm9tIGEgUnVieQogICogIG1ldGhvZCkuIFRyYWNpbmcg aXMgZGlzYWJsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIF9wcm9jXy4KKyAqICBfbWFza18gaXMg YW4gb3B0aW9uYWwgYml0bWFzayBvZiBldmVudHMgdG8gdHJpZ2dlciBvbiwgU2VlIHJ1YnkuaAor ICogIGZvciB0aGUgaW50ZWdlciB2YWx1ZXMuIElmIG5vIG1hc2sgaXMgc3BlY2lmaWVkIGFsbCBl dmVudHMgYXJlIHRyaWdnZXJlZC4KICAqCiAgKiAgICAgIGNsYXNzIFRlc3QKICAqCWRlZiB0ZXN0 CkBAIC0zNTQxLDExICszNTQ0LDI4IEBAIHN0YXRpYyB2b2lkIGNhbGxfdHJhY2VfZnVuYyhyYl9l dmVudF9mbGFnX3QsIFZBTFVFIGRhdGEsIFZBTFVFIHNlbGYsIElEIGlkLCBWQUxVCiAgKgkgIGxp bmUgcHJvZy5yYjozICAgICAgICB0ZXN0ICAgICBUZXN0CiAgKgkgIGxpbmUgcHJvZy5yYjo0ICAg ICAgICB0ZXN0ICAgICBUZXN0CiAgKiAgICAgIHJldHVybiBwcm9nLnJiOjQgICAgICAgIHRlc3Qg ICAgIFRlc3QKKyAqCisgKiAgICAgIHNldF90cmFjZV9mdW5jKHByb2MgeyB8ZXZlbnQsIGZpbGUs IGxpbmUsIGlkLCBiaW5kaW5nLCBjbGFzc25hbWV8CisgKgkgICBwcmludGYgIiU4cyAlczolLTJk ICUxMHMgJThzXG4iLCBldmVudCwgZmlsZSwgbGluZSwgaWQsIGNsYXNzbmFtZQorICogICAgICB9 LCAweDAxOCkgIyAweDAxOCA9PSBjYWxscyBhbmQgcmV0dXJucyBvbmx5CisgKiAgICAgIHQgPSBU ZXN0Lm5ldworICogICAgICB0LnRlc3QKKyAqCisgKiAgCSAgY2FsbCBwcm9nLnJiOjIgICAgICAg IHRlc3QgICAgIFRlc3QKKyAqICAgICAgcmV0dXJuIHByb2cucmI6NCAgICAgICAgdGVzdCAgICAg VGVzdAorCiAgKi8KIAogc3RhdGljIFZBTFVFCi1zZXRfdHJhY2VfZnVuYyhWQUxVRSBvYmosIFZB TFVFIHRyYWNlKQorc2V0X3RyYWNlX2Z1bmMoaW50IGFyZ2MsIFZBTFVFICphcmd2KQogeworICAg IFZBTFVFIHZtYXNrOworICAgIFZBTFVFIHRyYWNlOworICAgIGludCBtYXNrPVJVQllfRVZFTlRf QUxMOworICAgIGlmICgyID09IHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMTEiLCAmdHJhY2Us ICZ2bWFzaykpIHsKKyAgICAgICAgbWFzayA9IE5VTTJJTlQodm1hc2spOworICAgIH0KKwogICAg IHJiX3JlbW92ZV9ldmVudF9ob29rKGNhbGxfdHJhY2VfZnVuYyk7CiAKICAgICBpZiAoTklMX1Ao dHJhY2UpKSB7CkBAIC0zNTU2LDcgKzM1NzYsNyBAQCBzZXRfdHJhY2VfZnVuYyhWQUxVRSBvYmos IFZBTFVFIHRyYWNlKQogCXJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsICJ0cmFjZV9mdW5jIG5lZWRz IHRvIGJlIFByb2MiKTsKICAgICB9CiAKLSAgICByYl9hZGRfZXZlbnRfaG9vayhjYWxsX3RyYWNl X2Z1bmMsIFJVQllfRVZFTlRfQUxMLCB0cmFjZSk7CisgICAgcmJfYWRkX2V2ZW50X2hvb2soY2Fs bF90cmFjZV9mdW5jLCBtYXNrLCB0cmFjZSk7CiAgICAgcmV0dXJuIHRyYWNlOwogfQogCkBAIC0z ODAxLDcgKzM4MjEsNyBAQCBJbml0X1RocmVhZCh2b2lkKQogICAgIHJiX2VUaHJlYWRFcnJvciA9 IHJiX2RlZmluZV9jbGFzcygiVGhyZWFkRXJyb3IiLCByYl9lU3RhbmRhcmRFcnJvcik7CiAKICAg ICAvKiB0cmFjZSAqLwotICAgIHJiX2RlZmluZV9nbG9iYWxfZnVuY3Rpb24oInNldF90cmFjZV9m dW5jIiwgc2V0X3RyYWNlX2Z1bmMsIDEpOworICAgIHJiX2RlZmluZV9nbG9iYWxfZnVuY3Rpb24o InNldF90cmFjZV9mdW5jIiwgc2V0X3RyYWNlX2Z1bmMsIC0xKTsKICAgICByYl9kZWZpbmVfbWV0 aG9kKHJiX2NUaHJlYWQsICJzZXRfdHJhY2VfZnVuYyIsIHRocmVhZF9zZXRfdHJhY2VfZnVuY19t LCAxKTsKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NUaHJlYWQsICJhZGRfdHJhY2VfZnVuYyIs IHRocmVhZF9hZGRfdHJhY2VfZnVuY19tLCAxKTsKIAotLSAKMS41LjYuMwoKCkZyb20gZTVhMjNj ZjVkMTM1YWJlODQyMGRhZDdmMDY2YTcxMjdlMzRmNjcwNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDEKRnJvbTogcm9ja3kgPHJvY2t5QHNhbmNoZXouKG5vbmUpPgpEYXRlOiBUaHUsIDI2IE1hciAy MDA5IDA1OjU0OjMwIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gTWFrZSBzdXJlIHRlc3QgaW5jbHVk ZXMgYSAicmFpc2UiIGV2ZW50CgotLS0KIHRlc3QvdHJhY2UucmIgfCAgIDI5ICsrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tCiAxIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDEx IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rlc3QvdHJhY2UucmIgYi90ZXN0L3RyYWNlLnJi CmluZGV4IDRlNWY1NTguLmZkYTYxMGQgMTAwNjQ0Ci0tLSBhL3Rlc3QvdHJhY2UucmIKKysrIGIv dGVzdC90cmFjZS5yYgpAQCAtMSwxNCArMSwxNiBAQAogcmVxdWlyZSAndGVzdC91bml0JwogCi1k ZWYgc3FyKHgpCi0gIHJldHVybiB4KngKK2RlZiBidWdneSh4LCB5KQorICByZXR1cm4geCAvIHkg KiB5CiBlbmQKIAotZGVmIHNvbWV0aGluZygpCi0gIHg9NQotICB4PTYuMiBpZiB4PT02LjEKLSAg eD03Ci0gIHNxcig1KQorZGVmIHNvbWV0aGluZyhjKQorICBiPTAgaWYgYz09Ni4xCisgIGJlZ2lu CisgICAgcmV0dXJuIGJ1Z2d5KDUsIGIpCisgIHJlc2N1ZQorICBlbmQKKyAgcmV0dXJuIDAKIGVu ZAogCiBjbGFzcyBUZXN0VHJhY2UgPCBUZXN0OjpVbml0OjpUZXN0Q2FzZQpAQCAtMTksNiArMjEs NyBAQCBjbGFzcyBUZXN0VHJhY2UgPCBUZXN0OjpVbml0OjpUZXN0Q2FzZQogICBlbmQKIAogICBk ZWYgdHJhY2VfZnVuYyhldmVudCwgZmlsZSwgbGluZSwgaWQsIGJpbmRpbmcsIGtsYXNzLCAqKQor ICAgIHB1dHMgIiN7ZmlsZX06I3tsaW5lfSAtICN7ZXZlbnR9IiBpZiAkREVCVUcKICAgICBAQG1z Z3MgPDwgW2V2ZW50LCBmaWxlLCBsaW5lXQogICBlbmQKIApAQCAtMjcsOCArMzAsOCBAQCBjbGFz cyBUZXN0VHJhY2UgPCBUZXN0OjpVbml0OjpUZXN0Q2FzZQogICBlbmQKIAogICBkZWYgdGVzdF90 cmFjZV9tYXNrX2FuZF9hbGwKLSAgICBzZXRfdHJhY2VfZnVuYyhtZXRob2QoOnRyYWNlX2Z1bmMp LnRvX3Byb2MsIDB4MDAxOCkKLSAgICBzb21ldGhpbmcoKQorICAgIHNldF90cmFjZV9mdW5jKG1l dGhvZCg6dHJhY2VfZnVuYykudG9fcHJvYywgMHgwMDE4KSAjIENhbGxzL3JldHVybnMKKyAgICBz b21ldGhpbmcoNi4xKQogICAgIHNldF90cmFjZV9mdW5jKG5pbCkKICAgICBhc3NlcnRfZXF1YWwo dHJ1ZSwgCiAgICAgICAgICAgICAgICAgIEBAbXNncy5pbmplY3QgZG8gfHJlc3VsdCwgdHJpcGxl fCAKQEAgLTM3LDExICs0MCwxNSBAQCBjbGFzcyBUZXN0VHJhY2UgPCBUZXN0OjpVbml0OjpUZXN0 Q2FzZQogICAgICAgICAgICAgICAgICAidHJhY2UgLSBvbmx5IGNhbGwvcmV0dXJuIGV2ZW50cyIK ICAgICAgICAgICAgICAgICAgKQogICAgIGNhbGxfcmV0dXJuX2V2ZW50X2NvdW50ID0gQEBtc2dz LnNpemUKKyAgICBAQG1zZ3MgPSBbXQorICAgIHB1dHMgJz0nICogMjAgaWYgJERFQlVHCiAgICAg c2V0X3RyYWNlX2Z1bmMobWV0aG9kKDp0cmFjZV9mdW5jKS50b19wcm9jKQotICAgIHNvbWV0aGlu ZygpCisgICAgc29tZXRoaW5nKDYuMSkKICAgICBzZXRfdHJhY2VfZnVuYyhuaWwpCiAgICAgYXNz ZXJ0X2VxdWFsKHRydWUsIEBAbXNncy5zaXplID4gY2FsbF9yZXR1cm5fZXZlbnRfY291bnQsCi0g ICAgICAgICAgICAgICAgICd0cmFjZSAtIGFsbCBldmVudHMnKQorICAgICAgICAgICAgICAgICAn dHJhY2UgLSBhbGwgZXZlbnRzLiBTaG91bGQgcmVjb3JkIG1vcmUgZXZlbnRzLicpCisgICAgYXNz ZXJ0X2VxdWFsKDEsIEBAbXNncy5zZWxlY3Qge3x4fCB4WzBdID09ICdyYWlzZSd9LnNpemUsCisg ICAgICAgICAgICAgICAgICd0cmFjZSAtIGFsbCBldmVudHMuIFNob3VsZCBnZXQgYSByYWlzZSBl dmVudCcpCiAKICAgZW5kCiBlbmQKLS0gCjEuNS42LjMKCg --00221532c7188dd6190466394349--