From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6038 invoked from network); 30 Jul 2008 02:31:29 -0000 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.2.5 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 30 Jul 2008 02:31:29 -0000 Received-SPF: none (ns1.primenet.com.au: domain at sunsite.dk does not designate permitted sender hosts) Received: (qmail 30810 invoked from network); 30 Jul 2008 02:31:24 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 30 Jul 2008 02:31:24 -0000 Received: (qmail 21991 invoked by alias); 30 Jul 2008 02:31:20 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 25348 Received: (qmail 21974 invoked from network); 30 Jul 2008 02:31:20 -0000 Received: from bifrost.dotsrc.org (130.225.254.106) by sunsite.dk with SMTP; 30 Jul 2008 02:31:20 -0000 Received: from qb-out-0506.google.com (qb-out-0506.google.com [72.14.204.229]) by bifrost.dotsrc.org (Postfix) with ESMTP id 41A6580561C9 for ; Wed, 30 Jul 2008 04:31:15 +0200 (CEST) Received: by qb-out-0506.google.com with SMTP id a16so53499qbd.37 for ; Tue, 29 Jul 2008 19:31:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:in-reply-to:mime-version:content-type:references; bh=8r6+a2tzWr/6bw+bT/u69k6oB7dHQ9RI7IzMwhnQQxI=; b=LfMymfekDpItdWAjuGTXxoCNb6OLX6fV/zT51Tw4rETUewLN3YoIW+F/JC9kq72+M1 et/SDppiCm7UWoPMEOxkexORs+IOey2+F/rF6x82T0Y7IT3IrauBkzUrDINeft8LGBeP XBkRPtD81AAkGTwQ7f2AnijB6ElJOvsJ1iyWA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:in-reply-to:mime-version :content-type:references; b=jnRBZ1l5vgFuT2rpnuj2friU+6ATPoha3r+kPlEQj+W99QHCPZyUyIZm5L24v3JJsn IYEvm18vmnD0bkzBecMaLBxdayqs0j1u3xVDwEsTk3GM4EM6BMrAYeEXt1OCP9MB9Hg3 i/pLo9VLIPcuy678F189ihiVH4K5f6jl6qO64= Received: by 10.114.151.13 with SMTP id y13mr7658870wad.148.1217385073989; Tue, 29 Jul 2008 19:31:13 -0700 (PDT) Received: by 10.114.159.2 with HTTP; Tue, 29 Jul 2008 19:31:13 -0700 (PDT) Message-ID: <6cd6de210807291931u233de5tcf021f6b323163db@mail.gmail.com> Date: Tue, 29 Jul 2008 22:31:13 -0400 From: "Rocky Bernstein" To: zsh-workers@sunsite.dk Subject: Re: Getting source file and line number of a function. In-Reply-To: <6cd6de210807280546k14a1a59fo40cb6ed968b1227b@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_41090_22149440.1217385073970" References: <6cd6de210807261806r7ff184fdtcc7859cca0a98aef@mail.gmail.com> <200807280834.m6S8YEVo026326@news01.csr.com> <6cd6de210807280546k14a1a59fo40cb6ed968b1227b@mail.gmail.com> X-Virus-Scanned: ClamAV 0.92.1/7882/Tue Jul 29 21:06:54 2008 on bifrost X-Virus-Status: Clean ------=_Part_41090_22149440.1217385073970 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Attached is slight improvement on the patch posted before - it adds source files to be put in functrace. I'm not sure how functrace strings get freed; an explicit free() doesn't work However see my next post regarding trap DEBUG. On Mon, Jul 28, 2008 at 8:46 AM, Rocky Bernstein wrote: > Patch should be added. It's not the only way to do this and it changes > the functrace (which could easily be addressed, so there might be some > discussion. > > Comments about how the patch works are below. For the little that I've > tried, it seems to work. Of course there are other line number > weirdnesses I haven't worked out yet. > > One thing more easily addressed is the fact that sourcing a file > doesn't show in functrace and I think it should. I think sourcing is > in fact like a function call. In fact one can write "source" as a > function which does a read/eval of the file name. > > In looking at the code in surrounding the patch one question I have is > how the strings allocated for funcstack->name and funcstack->caller > get freed? This is relevant if one extends source to do the same > thing. > > Thanks. > > > On Mon, Jul 28, 2008 at 4:34 AM, Peter Stephenson wrote: >> "Rocky Bernstein" wrote: >>> I see that zsh has now has array variables functrace and >>> funcstack. Functrace stack gives a function name and a line offset >>> from the function. But for many things involving location reporting, >>> it would more be desirable to have a filename and absolute line >>> location. >>> >>> Alternatively, if there were a way to get the filename and line number >>> of the beginning of a given function, one can do some arithmetic to >>> get the absolute position. >>> >>> Is there currently a way to get this information. Should I try at >>> submitting a patch? >> >> It would be useful to have information referred to the autoload file, >> and I've wondered about how to do it, but I don't think it's trivial >> with the current way line numbers work. We would probably need to add >> an extra internal variable for file line numbers, and present another >> variable (or array, if in the funcstack style) to users to distinguish >> the two. > > This is more or less the approach I tried. There is a variable called > scriptname which I think is a little misleading. It is the name of the > file when not in a function but gets set to a function name when that > is run. So I added a variable called scriptfilename which mirrors > scriptname but doesn't get changed when a function is run. > > When functions are defined, I save the current file, scriptfilename, > and line number, lineno, in the shfunc structure. As for the C > funcstack list, rather than remove any of the existing information, I > added two more fields for the filename and absolute line number. Right > now I changed the functrace routine in Src/Modules/parameter.c to use > these new fields rather than the old ones. If one wants the function > name rather than the file name, one can always use funcstack which has > that. So right now you can't easily get the line number relative to > the beginning of the function, although it's there. > > bash can show the new information, file name and starting line number using > > declare -F *fn* > > (Actually, shopt extdebug also has to be set.) It might be helpful to > add that, and this would be one way to get the old function offset > information. Another way would be to turn functrace into a builtin > function and pass (an optional?) parameter indicating what flavor of > information you want. Or a 3rd routine/variable could be used. > >> >> -- >> Peter Stephenson Software Engineer >> CSR PLC, Churchill House, Cambridge Business Park, Cowley Road >> Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 >> > ------=_Part_41090_22149440.1217385073970 Content-Type: text/x-diff; name=functrace.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fj9bieu11 Content-Disposition: attachment; filename=functrace.diff Y3ZzIGRpZmYgLXUKY3ZzIGRpZmY6IERpZmZpbmcgLgpJbmRleDogZXhlYy5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnNyb290L3pzaC96c2gvU3JjL2V4ZWMuYyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xMzQKZGlmZiAtdSAtcjEuMTM0IGV4ZWMuYwotLS0gZXhlYy5jCTE3IEp1bCAyMDA4IDEx OjI3OjU3IC0wMDAwCTEuMTM0CisrKyBleGVjLmMJMzAgSnVsIDIwMDggMDI6MjE6NDMgLTAwMDAK QEAgLTM5MTMsNiArMzkxMyw4IEBACiAJc2hmID0gKFNoZnVuYykgemFsbG9jKHNpemVvZigqc2hm KSk7CiAJc2hmLT5mdW5jZGVmID0gcHJvZzsKIAlzaGYtPm5vZGUuZmxhZ3MgPSAwOworCXNoZi0+ ZmlsZW5hbWUgPSB6dHJkdXAoc2NyaXB0ZmlsZW5hbWUpOworCXNoZi0+bGluZW5vID0gbGluZW5v OwogCiAJaWYgKCFuYW1lcykgewogCSAgICAvKgpAQCAtNDEyMyw2ICs0MTI1LDcgQEAKICNpZmRl ZiBNQVhfRlVOQ1RJT05fREVQVEgKICAgICBzdGF0aWMgaW50IGZ1bmNkZXB0aDsKICNlbmRpZgor ICAgIFNoZnVuYyBzaGY7CiAKICAgICBwdXNoaGVhcCgpOwogCkBAIC00MTkzLDcgKzQxOTYsMTUg QEAKICAgICBmc3RhY2subGluZW5vID0gbGluZW5vOwogICAgIGZzdGFjay5wcmV2ID0gZnVuY3N0 YWNrOwogICAgIGZ1bmNzdGFjayA9ICZmc3RhY2s7Ci0KKyAgICBpZiAob2FyZ3YwICYmIChzaGYg PSAoU2hmdW5jKSBzaGZ1bmN0YWItPmdldG5vZGUoc2hmdW5jdGFiLCBvYXJndjApKSkgeworICAg ICAgICBmc3RhY2suZmxpbmVubyA9IHNoZi0+bGluZW5vICsgbGluZW5vOworCWZzdGFjay5maWxl bmFtZSA9IGR1cHN0cmluZyhzaGYtPmZpbGVuYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBm c3RhY2suZmxpbmVubyA9IGxpbmVubzsKKwlmc3RhY2suZmlsZW5hbWUgPSBkdXBzdHJpbmcoZnN0 YWNrLmNhbGxlcik7CisgICAgfQorICAgIAorICAgIAogICAgIGlmIChwcm9nLT5mbGFncyAmIEVG X1JVTikgewogCVNoZnVuYyBzaGY7CiAKSW5kZXg6IGluaXQuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3Zzcm9vdC96c2gvenNoL1NyYy9pbml0LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODYK ZGlmZiAtdSAtcjEuODYgaW5pdC5jCi0tLSBpbml0LmMJMTcgSnVsIDIwMDggMTE6Mjc6NTcgLTAw MDAJMS44NgorKysgaW5pdC5jCTMwIEp1bCAyMDA4IDAyOjIxOjQzIC0wMDAwCkBAIC0zMzQsNiAr MzM0LDcgQEAKIAkgICAgfQogCSAgICBvcHRzW0lOVEVSQUNUSVZFXSAmPSAxOwogCSAgICBhcmd6 ZXJvID0gKmFyZ3Y7CisJICAgIHNjcmlwdGZpbGVuYW1lID0gYXJnemVybzsKIAkgICAgYXJndisr OwogCX0KIAl3aGlsZSAoKmFyZ3YpCkBAIC0xMDY1LDggKzEwNjYsMTAgQEAKICAgICBpbnQgb2xk c2hzdCwgb3N1YnNoLCBvbG9vcHM7CiAgICAgRklMRSAqb2JzaGluOwogICAgIGNoYXIgKm9sZF9z Y3JpcHRuYW1lID0gc2NyaXB0bmFtZSwgKnVzOworICAgIGNvbnN0IGNoYXIgKm9sZF9zY3JpcHRm aWxlbmFtZSA9IHNjcmlwdGZpbGVuYW1lOwogICAgIHVuc2lnbmVkIGNoYXIgKm9jczsKICAgICBp bnQgb2NzcDsKKyAgICBzdHJ1Y3QgZnVuY3N0YWNrIGZzdGFjazsKIAogICAgIGlmICghcyB8fCAK IAkoIShwcm9nID0gdHJ5X3NvdXJjZV9maWxlKCh1cyA9IHVubWV0YShzKSkpKSAmJgpAQCAtMTA5 Niw4ICsxMDk5LDE3IEBACiAgICAgbG9vcHMgID0gMDsKICAgICBkb3NldG9wdChTSElOU1RESU4s IDAsIDEpOwogICAgIHNjcmlwdG5hbWUgPSBzOworICAgIHNjcmlwdGZpbGVuYW1lID0gczsKIAog ICAgIHNvdXJjZWxldmVsKys7CisgICAgZnN0YWNrLm5hbWUgPSAic291cmNlIjsKKyAgICBmc3Rh Y2suY2FsbGVyID0gZHVwc3RyaW5nKHNjcmlwdG5hbWUpOworICAgIGZzdGFjay5mbGluZW5vID0g b2xkbGluZW5vOworICAgIGZzdGFjay5saW5lbm8gPSBvbGRsaW5lbm87CisgICAgZnN0YWNrLmZp bGVuYW1lID0gZHVwc3RyaW5nKG9sZF9zY3JpcHRmaWxlbmFtZSk7CisgICAgZnN0YWNrLnByZXYg PSBmdW5jc3RhY2s7CisgICAgZnVuY3N0YWNrID0gJmZzdGFjazsKKyAgICAKICAgICBpZiAocHJv ZykgewogCXB1c2hoZWFwKCk7CiAJZXJyZmxhZyA9IDA7CkBAIC0xMTA1LDYgKzExMTcsOCBAQAog CXBvcGhlYXAoKTsKICAgICB9IGVsc2UKIAlsb29wKDAsIDApOwkJICAgICAvKiBsb29wIHRocm91 Z2ggdGhlIGZpbGUgdG8gYmUgc291cmNlZCAgKi8KKyAgICBmdW5jc3RhY2sgPSBmdW5jc3RhY2st PnByZXY7CisgICAgc2NyaXB0ZmlsZW5hbWUgPSBvbGRfc2NyaXB0ZmlsZW5hbWU7CiAgICAgc291 cmNlbGV2ZWwtLTsKIAogICAgIC8qIHJlc3RvcmUgdGhlIGN1cnJlbnQgc2hlbGwgc3RhdGUgKi8K SW5kZXg6IHV0aWxzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvenNoL3pzaC9TcmMv dXRpbHMuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTcKZGlmZiAtdSAtcjEuMTk3IHV0aWxz LmMKLS0tIHV0aWxzLmMJMTcgSnVsIDIwMDggMTE6Mjc6NTcgLTAwMDAJMS4xOTcKKysrIHV0aWxz LmMJMzAgSnVsIDIwMDggMDI6MjE6NDUgLTAwMDAKQEAgLTMzLDcgKzMzLDggQEAKIC8qIG5hbWUg b2Ygc2NyaXB0IGJlaW5nIHNvdXJjZWQgKi8KIAogLyoqLwotbW9kX2V4cG9ydCBjaGFyICpzY3Jp cHRuYW1lOworbW9kX2V4cG9ydCBjaGFyICpzY3JpcHRuYW1lOyAgICAgLyogaXMgc29tZXRpbWVz IGEgZnVuY3Rpb24gbmFtZSAqLworbW9kX2V4cG9ydCBjaGFyICpzY3JpcHRmaWxlbmFtZTsKIAog I2lmZGVmIE1VTFRJQllURV9TVVBQT1JUCiBzdHJ1Y3Qgd2lkZWNoYXJfYXJyYXkgewpJbmRleDog enNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvenNoL3pzaC9TcmMvenNoLmgsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM4CmRpZmYgLXUgLXIxLjEzOCB6c2guaAotLS0genNoLmgJ MTIgSnVuIDIwMDggMTM6NDU6MDYgLTAwMDAJMS4xMzgKKysrIHpzaC5oCTMwIEp1bCAyMDA4IDAy OjIxOjQ2IC0wMDAwCkBAIC0xMDU5LDYgKzEwNTksOCBAQAogCiBzdHJ1Y3Qgc2hmdW5jIHsKICAg ICBzdHJ1Y3QgaGFzaG5vZGUgbm9kZTsKKyAgICBjaGFyICpmaWxlbmFtZTsgICAgICAgICAgICAg LyogTmFtZSBvZiBmaWxlIGxvY2F0ZWQgaW4gKi8KKyAgICBpbnQgbGluZW5vOwkJCS8qIGxpbmUg bnVtYmVyIGluIGFib3ZlIGZpbGUgKi8KICAgICBFcHJvZyBmdW5jZGVmOwkJLyogZnVuY3Rpb24g ZGVmaW5pdGlvbiAgICAqLwogfTsKIApAQCAtMTA3Nyw4ICsxMDc5LDEwIEBACiBzdHJ1Y3QgZnVu Y3N0YWNrIHsKICAgICBGdW5jc3RhY2sgcHJldjsJCS8qIHByZXZpb3VzIGluIHN0YWNrICovCiAg ICAgY2hhciAqbmFtZTsJCQkvKiBuYW1lIG9mIGZ1bmN0aW9uIGNhbGxlZCAqLworICAgIGNoYXIg KmZpbGVuYW1lOwkJLyogZmlsZSBmdW5jdGlvbiByZXNpZGVzIGluICovCiAgICAgY2hhciAqY2Fs bGVyOwkJLyogbmFtZSBvZiBjYWxsZXIgKi8KLSAgICBpbnQgbGluZW5vOwkJCS8qIGxpbmUgbnVt YmVyIGluIGZpbGUgKi8KKyAgICBpbnQgZmxpbmVubzsJCS8qIGxpbmUgbnVtYmVyIGluIGZpbGUg Ki8KKyAgICBpbnQgbGluZW5vOwkJCS8qIGxpbmUgb2Zmc2V0IGZyb20gYmVnaW5uaW5nIG9mIGZ1 bmN0aW9uICovCiB9OwogCiAvKiBub2RlIGluIGxpc3Qgb2YgZnVuY3Rpb24gY2FsbCB3cmFwcGVy cyAqLwpjdnMgZGlmZjogRGlmZmluZyBCdWlsdGlucwpjdnMgZGlmZjogRGlmZmluZyBNb2R1bGVz CkluZGV4OiBNb2R1bGVzL3BhcmFtZXRlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290 L3pzaC96c2gvU3JjL01vZHVsZXMvcGFyYW1ldGVyLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NDUKZGlmZiAtdSAtcjEuNDUgcGFyYW1ldGVyLmMKLS0tIE1vZHVsZXMvcGFyYW1ldGVyLmMJNSBT ZXAgMjAwNyAxNjoxNjoxNyAtMDAwMAkxLjQ1CisrKyBNb2R1bGVzL3BhcmFtZXRlci5jCTMwIEp1 bCAyMDA4IDAyOjIxOjQ2IC0wMDAwCkBAIC01MjgsOCArNTI4LDggQEAKICAgICBmb3IgKGYgPSBm dW5jc3RhY2ssIHAgPSByZXQ7IGY7IGYgPSBmLT5wcmV2LCBwKyspIHsKIAljaGFyICpjb2xvbnBh aXI7CiAKLQljb2xvbnBhaXIgPSB6aGFsbG9jKHN0cmxlbihmLT5jYWxsZXIpICsgKGYtPmxpbmVu byA+IDk5OTkgPyAyNCA6IDYpKTsKLQlzcHJpbnRmKGNvbG9ucGFpciwgIiVzOiVkIiwgZi0+Y2Fs bGVyLCBmLT5saW5lbm8pOworCWNvbG9ucGFpciA9IHpoYWxsb2Moc3RybGVuKGYtPmZpbGVuYW1l KSArIChmLT5mbGluZW5vID4gOTk5OSA/IDI0IDogNikpOworCXNwcmludGYoY29sb25wYWlyLCAi JXM6JWQiLCBmLT5maWxlbmFtZSwgZi0+ZmxpbmVubyk7CiAKIAkqcCA9IGNvbG9ucGFpcjsKICAg ICB9Cg== ------=_Part_41090_22149440.1217385073970--