From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32335 invoked by alias); 5 Nov 2014 16:50:37 -0000 Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org Received: (qmail 32244 invoked by uid 89); 5 Nov 2014 16:50:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.4 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-wi0-f181.google.com Received: from mail-wi0-f181.google.com (HELO mail-wi0-f181.google.com) (209.85.212.181) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 05 Nov 2014 16:50:34 +0000 Received: by mail-wi0-f181.google.com with SMTP id n3so2611104wiv.2 for ; Wed, 05 Nov 2014 08:50:31 -0800 (PST) X-Received: by 10.194.184.140 with SMTP id eu12mr48215346wjc.47.1415206231110; Wed, 05 Nov 2014 08:50:31 -0800 (PST) MIME-Version: 1.0 Received: by 10.194.177.231 with HTTP; Wed, 5 Nov 2014 08:50:09 -0800 (PST) In-Reply-To: References: From: nojhan Date: Wed, 05 Nov 2014 16:50:00 -0000 Message-ID: Subject: Re: Define python hooks To: gdb Content-Type: multipart/mixed; boundary=047d7bacc2c0b0930a05071f60e6 X-IsSubscribed: yes X-SW-Source: 2014-11/txt/msg00004.txt.bz2 --047d7bacc2c0b0930a05071f60e6 Content-Type: text/plain; charset=UTF-8 Content-length: 2033 Here are the three complete examples, I hope this will be more clear. Or in a gist: https://gist.github.com/nojhan/c3bc28e2fa0608f21551 -- nojhan On Wed, Oct 29, 2014 at 7:39 PM, Doug Evans wrote: > On Tue, Oct 28, 2014 at 6:17 AM, nojhan wrote: >> The documentation states that "It is valid for a hook to call the >> command which it hooks. If this occurs, the hook is not re-executed, >> thereby avoiding infinite recursion." >> But this does not seems to be true for the python API. >> >> Here what I tried: >> 1) Defining the hook as a python function that would gdb.execute the >> same command. Failed, because then the command is executed twice. > > You mean the hook is executed twice, right? > The docs say the hook won't be executed twice, but executing the > command twice is ok. > > I tried a trivial example and couldn't reproduce symptoms of the hook > being executed twice. > This is with current sources and 7.8 (release and branch). > > (gdb) define foo > echo Hi there.\n > end > (gdb) define hookpost-foo > echo Me again.\n > python gdb.execute("foo") > end > (gdb) foo > Hi there. > Me again. > Hi there. > (gdb) > >> Additionally, I did not find how to access the arguments of the >> command. > > I'm not sure what you mean here. > Access the arguments of the command from the hook? > I don't think we support that. > >> 2) Overload the existing command with a python class binded on the >> same command name. Failed because of infinite recursion. > > Infinite recursion because command -> hook -> command -> hook -> ... > or something else? > Just trying to understand if and how this is different from (1). > > If it's easy, providing an example so that we can see it for ourselves > will help. > >> 3) Use a named pipe to communicate. Failed (sort of) because one >> should sleep a variable amount of time waiting for the pipe to be >> consumed before returning to the prompt. > > I don't understand how this relates to (1) and (2). > Communicate what between whom? --047d7bacc2c0b0930a05071f60e6 Content-Type: application/octet-stream; name="test.gdbinit" Content-Disposition: attachment; filename="test.gdbinit" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i24x74z60 Content-length: 4388 CiMgV2Ugd2FudCB0byBiZSBhYmxlIHRvIG1hbmlwdWxhdGUgdGhlIG91dHB1 dCBvZiBHREIgd2l0aCBhIHB5dGhvbiBmdW5jdGlvbi4KCiMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCiMgRXhhbXBsZSAxOiBEZWZpbmluZyB0aGUgaG9v ayBhcyBhIHB5dGhvbiBmdW5jdGlvbiB0aGF0IHdvdWxkIGdkYi5leGVjdXRl IHRoZSBzYW1lIGNvbW1hbmQKIyBQcm9ibGVtOiBUaGUgY29tbWFuZCBpcyBl eGVjdXRlZCB0d2ljZSBhbmQgd2UgY2FuJ3QgYWNjZXNzIGFyZ3MgaW4gdGhl IGhvb2suCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpweXRob24KCmlt cG9ydCBnZGIKCmNsYXNzIFJ1bl9weShnZGIuQ29tbWFuZCk6CiAgICBkZWYg X19pbml0X18gKHNlbGYpOgogICAgICAgICMgQmluZCB0byBydW4gYXMgaWYg d2Ugd2FudGVkIHRvIHJlcGxhY2UgaXQKICAgICAgICBzdXBlciAoUnVuX3B5 LCBzZWxmKS5fX2luaXRfXyAoInJ1bl9weSIsIGdkYi5DT01NQU5EX1NVUFBP UlQsIGdkYi5DT01QTEVURV9GSUxFTkFNRSkKCiAgICBkZWYgaW52b2tlIChz ZWxmLCBhcmcsIGZyb21fdHR5KToKICAgICAgICBwcmludCgiaW52b2tlIHJ1 bl9weSIpCiAgICAgICAgIyBDYWxsIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBj b21tYW5kLi4uCiAgICAgICAgcmVzID0gZ2RiLmV4ZWN1dGUoInJ1biAiK2Fy ZywgdG9fc3RyaW5nPVRydWUpCiAgICAgICAgIyBMZXQncyBwcmV0ZW5kIHdl IGhhdmUgYSBweXRob25pYyBncmVwCiAgICAgICAgIyBwcmludChweWdyZXAo cmVzKSkKClJ1bl9weSgpCmVuZAoKZGVmaW5lIGhvb2stcnVuCnB5dGhvbgoj IFByb2JsZW06IEhvdyB0byBhY2Nlc3MgYXJncz8KcHJpbnQoImV4ZWN1dGUg cnVuIikKcmVzID0gZ2RiLmV4ZWN1dGUoInJ1bl9weSIsIHRvX3N0cmluZz1U cnVlKQpwcmludChyZXMpCmVuZAplbmQKCgoKCiMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCiMgRXhhbXBsZSAyOiBvdmVybG9hZCB0aGUgY29tbWFuZCB3 aXRoIGEgcHl0aG9uIGNsYXNzCiMgUHJvYmxlbTogbWF4aW11bSByZWN1cnNp b24gZGVwdGggZXhjZWVkZWQgd2hpbGUgY2FsbGluZyBhIFB5dGhvbiBvYmpl Y3QKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgcHl0aG9uCiMKIyBp bXBvcnQgZ2RiCiMKIyBjbGFzcyBSdW5fcHkoZ2RiLkNvbW1hbmQpOgojICAg ICBkZWYgX19pbml0X18gKHNlbGYpOgojICAgICAgICAgIyBCaW5kIHRvIHJ1 biBhcyBpZiB3ZSB3YW50ZWQgdG8gcmVwbGFjZSBpdAojICAgICAgICAgc3Vw ZXIgKFJ1bl9weSwgc2VsZikuX19pbml0X18gKCJydW4iLCBnZGIuQ09NTUFO RF9TVVBQT1JULCBnZGIuQ09NUExFVEVfRklMRU5BTUUpCiMKIyAgICAgZGVm IGludm9rZSAoc2VsZiwgYXJnLCBmcm9tX3R0eSk6CiMgICAgICAgICAjIENh bGwgdGhlIHVuZGVybHlpbmcgbmF0aXZlIGNvbW1hbmQuLi4KIyAgICAgICAg ICMgLi4uIGZhaWxzIGluIGEgcmVjdXJzaXZlIHRyYXAuCiMgICAgICAgICBy ZXMgPSBnZGIuZXhlY3V0ZSgicnVuICIrYXJnLCB0b19zdHJpbmc9VHJ1ZSkK IyAgICAgICAgICMgTGV0J3MgcHJldGVuZCB3ZSBoYXZlIGEgcHl0aG9uaWMg Z3JlcAojICAgICAgICAgI3ByaW50KHB5Z3JlcChyZXMpKQojCiMgUnVuX3B5 KCkKIyBlbmQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgRXhhbXBs ZSAzOiB1c2UgcGlwZSB0byBjb21tdW5pY2F0ZSB3aXRoIGEgcHl0aG9uIHBy b2dyYW0KIyBQcm9ibGVtOiB0aGUgdGltZSB0YWtlbiB0byBsb2FkIGFuZCBl eGVjdXRlIHRoZSBleHRlcm5hbCBweXRob24gcHJvZ3JhbQojICAgICAgICAg IGFuZCB0aHVzIHRoZSB1Z2x5IHNsZWVwIGhhY2suCiMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCgojICMgRG9uJ3Qgd3JhcCBsaW5lIG9yIHRoZSBjb2xv cmluZyByZWdleHAgd29uJ3Qgd29yay4KIyBzZXQgd2lkdGggMAojCiMgIyBD cmVhdGUgYSBuYW1lZCBwaXBlIHRvIGdldCBvdXRwdXRzIGZyb20gZ2RiCiMg c2hlbGwgdGVzdCAtZSAvdG1wL2dkYnBpcGUgJiYgcm0gL3RtcC9nZGJwaXBl CiMgc2hlbGwgbWtmaWZvIC90bXAvZ2RicGlwZQojCiMgZGVmaW5lIGxvZ2dp bmdfb24KIyAgICMgSW5zdGVhZCBvZiBwcmludGluZyBvbiBzdGRvdXQgb25s eSwgbG9nIGV2ZXJ5dGhpbmcuLi4KIyAgIHNldCBsb2dnaW5nIHJlZGlyZWN0 IG9uCiMgICAjIC4uLiBpbiBvdXIgbmFtZWQgcGlwZS4KIyAgIHNldCBsb2dn aW5nIG9uIC90bXAvZ2RicGlwZQojIGVuZAojCiMgZGVmaW5lIGxvZ2dpbmdf b2ZmCiMgICBzZXQgbG9nZ2luZyBvZmYKIyAgIHNldCBsb2dnaW5nIHJlZGly ZWN0IG9mZgojICAgIyBCZWNhdXNlIGJvdGggZ2RiIGFuZCBvdXIgY29tbWFu ZHMgYXJlIHdyaXRpbmcgb24gdGhlIHNhbWUgcGlwZSBhdCB0aGUgc2FtZQoj ICAgIyB0aW1lLCBpdCBpcyBtb3JlIHRoYW4gcHJvYmFibGUgdGhhdCBnZGIg d2lsbCBlbmQgYmVmb3JlIG91ciAoaGlnaGVyIGxldmVsKQojICAgIyBjb21t YW5kcy4gIFRoZSBnZGIgcHJvbXB0IHdpbGwgdGh1cyByZW5kZXIgYmVmb3Jl IHRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQsCiMgICAjIHdoaWNoIGlzIGhp Z2hseSBha3dhcmQuIFRvIHByZXZlbnQgdGhpcywgd2UgbmVlZCB0byB3YWl0 IGJlZm9yZSBkaXNwbGF5aW5nCiMgICAjIHRoZSBwcm9tcHQgYWdhaW4uICBU aGUgbW9yZSB5b3VyIGNvbW1hbmRzIGFyZSBjb21wbGV4LCB0aGUgaGlnaGVy IHlvdSB3aWxsCiMgICAjIG5lZWQgdG8gc2V0IHRoaXMuCiMgICBzaGVsbCBz bGVlcCAwLjRzCiMgZW5kCiMKIyBkZWZpbmUgaG9vay1ydW4KIyAgICAgIyBM ZXQncyBwcmV0ZW5kIHdlIGhhdmUgYSBweXRob25pYyBncmVwCiMgICAgIHNo ZWxsIGNhdCAvdG1wL2dkYnBpcGUgfCBweWdyZXAgIlByb2dyYW0gcmVjZWl2 ZWQgc2lnbmFsIiAmCiMgICAgIGxvZ2dpbmdfb24KIyBlbmQKIyBkZWZpbmUg aG9va3Bvc3QtcnVuCiMgICAgIGxvZ2dpbmdfb2ZmCiMgZW5kCiMKCgo= --047d7bacc2c0b0930a05071f60e6--