Re: Define python hooks

Doug Evans <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAP9bCMRWciyeUqh5EsWAO+WQdFKe8sdrFr-CtujGFDTpu7-vYQ@mail.gmail.com>
On Wed, Nov 5, 2014 at 8:50 AM, nojhan <[email protected]> wrote:
> Here are the three complete examples, I hope this will be more clear.
>
> Or in a gist:
> https://gist.github.com/nojhan/c3bc28e2fa0608f21551

Hi.

I looked at examples 1 and 2.
Re: #1: The command is executed twice, as expected, but the hook isn't
executed twice,
also as expected

Re: #2: We currently don't provide a way to access the "previous" version
of a command if it is overridden.  That would be a good enhancement alright.

I didn't have time to look at #3.

> On Wed, Oct 29, 2014 at 7:39 PM, Doug Evans <[email protected]> wrote:
>> On Tue, Oct 28, 2014 at 6:17 AM, nojhan <[email protected]> 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?
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.