From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 116320 invoked by alias); 18 Jun 2015 14:47:56 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 116302 invoked by uid 89); 18 Jun 2015 14:47:55 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 X-HELO: mail-oi0-f45.google.com Received: from mail-oi0-f45.google.com (HELO mail-oi0-f45.google.com) (209.85.218.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 18 Jun 2015 14:47:53 +0000 Received: by oiax193 with SMTP id x193so59070381oia.2 for ; Thu, 18 Jun 2015 07:47:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=mD6deGuMpzBYsb0aT4951Yd6crs+d1z50wthu8/FzwI=; b=G/Kc3adtrtIRT9HW9gKE8Zf/VGNMMap9xMnnUrRdd4btnqOKVRnOBb32QjH3IlJoVh 59mcRstXXEatxAHDSopA8vcIUxZdvdrihTwXHelZ/2IW043IVhERUSsvBzGAVEXrqoUS 663nvz9EE2n/PZUukOF+vqc0VWhI5ag0yApOAUgPfD3baOQAFwvljSttmjFWnJhcaGJ8 Qh+UVMwtfvtnbfsfhWe7qvoo5x3+WlANpAIvlBYrxwFyCUL5euGjZ0eIsWqO4apWJidE IP5Z7fNHMYygJ3GjJuchhSyOPwbguGza5HctuCDPYbEdpw2oMsH1EcvwvHp1A6cRYyBo t0oQ== X-Gm-Message-State: ALoCoQnOykd20lSwyXR1VWedsN6Rjzidd9dGYxy7NuhGfVB7WZFCMmgKz9bspMpw6EKjCwfzpXDB X-Received: by 10.182.102.129 with SMTP id fo1mr9513359obb.24.1434638871686; Thu, 18 Jun 2015 07:47:51 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.96.167 with HTTP; Thu, 18 Jun 2015 07:47:30 -0700 (PDT) In-Reply-To: References: <1434572241-16019-1-git-send-email-patrick@parcs.ath.cx> <55828A13.8030703@redhat.com> From: Patrick Palka Date: Thu, 18 Jun 2015 14:47:00 -0000 Message-ID: Subject: Re: [PATCH] Test the interaction between GDBHISTSIZE and .gdbinit To: Pedro Alves Cc: "gdb-patches@sourceware.org" Content-Type: multipart/mixed; boundary=089e0149d0ec542d6c0518cbe43a X-SW-Source: 2015-06/txt/msg00391.txt.bz2 --089e0149d0ec542d6c0518cbe43a Content-Type: text/plain; charset=UTF-8 Content-length: 2250 On Thu, Jun 18, 2015 at 8:44 AM, Patrick Palka wrote: > On Thu, Jun 18, 2015 at 5:06 AM, Pedro Alves wrote: >> On 06/17/2015 09:17 PM, Patrick Palka wrote: >>> The value inside the GDBHISTSIZE environment variable, only if valid, >>> should override setting the history size through one's .gdbinit file. >> >> Thanks, looks good. >> >>> + unset -nocomplain env(GDBHISTSIZE) >>> array set env [array get old_env] >> >> Though this unset looks unnecessary, given that the following line >> restores the whole array. > > It turns out that > > array set env [array get old_env] > > does not completely restore the env array to its original state. What > it seems to do is to reset each pre-existing environment variable > (existing in the saved env array) to its original value. New > environment variables that were set inside the env array in the > meantime do not get unset after restoring. So e.g. after doing > > array set old_env [array get env] > set env(SOME_NEW_VAR) foo > array set env [array get old_env] > > the environment variable SOME_NEW_VAR=foo will still be in the env > array. So this "array set env" trick is insufficient. That is why > the unset of GDBHISTSIZE is necessary there. > > To make the pattern of "temporarily altering global variables, > restoring their original value afterwards" more convenient and less > error-prone, I've been thinking about introducing a new tcl proc that > acts as a wrapper for saving/restoring a specified list of variables. > Its use would look something like: > > save_vars { INTERNAL_GDBFLAGS env(GDBHISTSIZE) env(HOME) } { > append INTERNAL_GDBFLAGS " -nx" > unset -nocomplain env(GDBHISTSIZE) > unset -nocomplain env(HOME) > gdb_test .... > more_gdb_test ... > } > > which guarantees that after the body has finished executing, the given > list of variables will have their contents restored to their original > values. What do you think about this? Here is an implementation of save_vars (bad name I know) which can successfully replace the manual saving/restoring of globals done in gdbinit-history.exp, gdbhistsize-history.exp and readline.exp. (TCL sure is cool.) --089e0149d0ec542d6c0518cbe43a Content-Type: text/plain; charset=US-ASCII; name="tmp (2).diff" Content-Disposition: attachment; filename="tmp (2).diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ib2atboq0 Content-length: 3010 ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAgYi9nZGIv dGVzdHN1aXRlL2xpYi9nZGIuZXhwCmluZGV4IGI1OTI4YzMuLjkyMTU3YTcg MTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAKKysrIGIv Z2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cApAQCAtMTgzMCw2ICsxODMwLDcx IEBAIHByb2Mgd2l0aF90ZXN0X3ByZWZpeCB7IHByZWZpeCBib2R5IH0gewog ICB9CiB9CiAKKyMgUnVuIEJPRFkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNh bGxlci4gIEFmdGVyIEJPRFkgaXMgcnVuLCB0aGUgdmFyaWFibGVzCisjIGxp c3RlZCBpbiBWQVJTIHdpbGwgYmUgcmVzZXQgdG8gdGhlIHZhbHVlcyB0aGV5 IGhhZCBiZWZvcmUgQk9EWSB3YXMgcnVuLgorIworIyBUaGlzIGlzIHVzZWZ1 bCBmb3IgcHJvdmlkaW5nIGEgc2NvcGUgaW4gd2hpY2ggaXQgaXMgc2FmZSB0 byB0ZW1wb3JhcmlseQorIyBtb2RpZnkgZ2xvYmFsIHZhcmlhYmxlcywgZS5n LgorIworIyBnbG9iYWwgSU5URVJOQUxfR0RCRkxBR1MKKyMgZ2xvYmFsIGVu dihHREJISVNUU0laRSkKKyMKKyMgc2F2ZV92YXJzIHsgSU5URVJOQUxfR0RC RkxBR1MgZW52KEdEQkhJU1RTSVpFKSB9IHsKKyMgICAgIGFwcGVuZCBJTlRF Uk5BTF9HREJGTEFHUyAiIC1ueCIKKyMgICAgIHVuc2V0IC1ub2NvbXBsYWlu IGVudihHREJISVNUU0laRSkKKyMgICAgIGdkYl9zdGFydAorIyAgICAgZ2Ri X3Rlc3QgLi4uCisjIH0KKyMKKyMgSGVyZSwgYWx0aG91Z2ggSU5URVJOQUxf R0RCRkxBR1MgYW5kIGVudihHREJISVNUU0laRSkgYXJlIG1vZGlmaWVkIGlu c2lkZSB0aGUKKyMgQk9EWSwgdGhpcyBwcm9jIHdpbGwgZ3VhcmFudGVlIHRo YXQgdGhlIG1vZGlmaWNhdGlvbnMgd2lsbCBiZSB1bmRvbmUgYWZ0ZXIKKyMg Qk9EWSBmaW5pc2hlcyBleGVjdXRpbmcuCisKK3Byb2Mgc2F2ZV92YXJzIHsg dmFycyBib2R5IH0geworICAgIGFycmF5IHNldCBzYXZlZF9zY2FsYXJzIHsg fQorICAgIGFycmF5IHNldCBzYXZlZF9hcnJheXMgeyB9CisgICAgc2V0IHVu c2V0X3ZhcnMgeyB9CisKKyAgICBmb3JlYWNoIHZhciAkdmFycyB7CisJIyBG aXJzdCBldmFsdWF0ZSBWQVIgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxl ciBpbiBjYXNlIHRoZSB2YXJpYWJsZQorCSMgbmFtZSBtYXkgYmUgYSBub3Qt eWV0LWludGVycG9sYXRlZCBzdHJpbmcgbGlrZSBlbnYoJGZvbykKKwlzZXQg dmFyIFt1cGxldmVsIDEgbGlzdCAkdmFyXQorCisJaWYgW3VwbGV2ZWwgMSBb bGlzdCBpbmZvIGV4aXN0cyAkdmFyXV0geworCSAgICBpZiBbdXBsZXZlbCAx IFtsaXN0IGFycmF5IGV4aXN0cyAkdmFyXV0geworCQlzZXQgc2F2ZWRfYXJy YXlzKCR2YXIpIFt1cGxldmVsIDEgW2xpc3QgYXJyYXkgZ2V0ICR2YXJdXQor CSAgICB9IGVsc2UgeworCQlzZXQgc2F2ZWRfc2NhbGFycygkdmFyKSBbdXBs ZXZlbCAxIFtsaXN0IHNldCAkdmFyXV0KKwkgICAgfQorCX0gZWxzZSB7CisJ ICAgIGxhcHBlbmQgdW5zZXRfdmFycyAkdmFyCisJfQorICAgIH0KKworICAg IHNldCBjb2RlIFtjYXRjaCB7dXBsZXZlbCAxICRib2R5fSByZXN1bHRdCisK KyAgICBmb3JlYWNoIHt2YXIgdmFsdWV9IFthcnJheSBnZXQgc2F2ZWRfc2Nh bGFyc10geworCXVwbGV2ZWwgMSBbbGlzdCBzZXQgJHZhciAkdmFsdWVdCisg ICAgfQorCisgICAgZm9yZWFjaCB7dmFyIHZhbHVlfSBbYXJyYXkgZ2V0IHNh dmVkX2FycmF5c10geworCXVwbGV2ZWwgMSBbbGlzdCB1bnNldCAkdmFyXQor CXVwbGV2ZWwgMSBbbGlzdCBhcnJheSBzZXQgJHZhciAkdmFsdWVdCisgICAg fQorCisgICAgZm9yZWFjaCB2YXIgJHVuc2V0X3ZhcnMgeworCXVwbGV2ZWwg MSBbbGlzdCB1bnNldCAtbm9jb21wbGFpbiAkdmFyXQorICAgIH0KKworICAg IGlmIHskY29kZSA9PSAxfSB7CisJZ2xvYmFsIGVycm9ySW5mbyBlcnJvckNv ZGUKKwlyZXR1cm4gLWNvZGUgJGNvZGUgLWVycm9yaW5mbyAkZXJyb3JJbmZv IC1lcnJvcmNvZGUgJGVycm9yQ29kZSAkcmVzdWx0CisgICAgfSBlbHNlIHsK KwlyZXR1cm4gLWNvZGUgJGNvZGUgJHJlc3VsdAorICAgIH0KK30KKworCiAj IFJ1biB0ZXN0cyBpbiBCT0RZIHdpdGggR0RCIHByb21wdCBhbmQgdmFyaWFi bGUgJGdkYl9wcm9tcHQgc2V0IHRvCiAjIFBST01QVC4gIFdoZW4gQk9EWSBp cyBmaW5pc2hlZCwgcmVzdG9yZSBHREIgcHJvbXB0IGFuZCB2YXJpYWJsZQog IyAkZ2RiX3Byb21wdC4K --089e0149d0ec542d6c0518cbe43a--