This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFC - Python] New ObjFile event
- From: Kevin Pouget <kevin dot pouget at gmail dot com>
- To: gdb-patches at sourceware dot org
- Date: Mon, 28 Mar 2011 04:11:12 -0400
- Subject: Re: [RFC - Python] New ObjFile event
- References: <AANLkTimybJtpUzy13FuLxQQMJfeWQuf3-cgqGmu23Bq5@mail.gmail.com> <AANLkTin=YO__Mz88HPFoT7a6_it5BxthnUdODJMs52eG@mail.gmail.com>
sorry, gdb/python/py-newobjfileevent.c has not been included in the
patch, here is its content:
-----
/* Python interface to new object file loading events.
Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "py-event.h"
static PyTypeObject new_objfile_event_object_type;
PyObject *
create_new_objfile_event_object (void)
{
return create_event_object (&new_objfile_event_object_type);
}
/* Callback function which notifies observers when a new objfile event occurs.
This function will create a new Python new_objfile event object.
Return -1 if emit fails. */
int
emit_new_objfile_event (struct objfile *objfile)
{
PyObject *event;
if (evregpy_no_listeners_p (gdb_py_events.newobjfile))
return 0;
event = create_new_objfile_event_object ();
if (event)
return evpy_emit_event (event, gdb_py_events.newobjfile);
return -1;
}
GDBPY_NEW_EVENT_TYPE (new_objfile,
"gdb.NewObjFileEvent",
"NewObjFileEvent",
"GDB new object file event object",
event_object_type,
static);
---
On Mon, Mar 28, 2011 at 4:06 AM, Kevin Pouget <kevin.pouget@gmail.com> wrote:
> Hello,
>
> following this discussion at
> http://sourceware.org/ml/gdb/2011-03/msg00136.html, I would like to
> suggest a patch for the Python event system. Based on the ''exited",
> "cont", ... events, this patch allows a python script to register an
> interest to the loading of new object files in the debuggee. GDB
> observer "observer_attach_new_objfile" is used to trigger the Python
> callback.
>
> This patch completes the auto-loading feature
> (http://sourceware.org/gdb/current/onlinedocs/gdb/objfile_002dgdb_002epy-file.html#objfile_002dgdb_002epy-file),
> and, likewise, allows Python's "gdb.current_objfile ()" to return the current
> object file.
>
> Here is an example of it utilization:
>
>> def obj_handler (event):
>> ? ? ? if gdb.current_objfile () is not None:
>> ? ? ? ? ? ? ? print "-->",gdb.current_objfile ().filename
>> ? ? ? else:
>> ? ? ? ? ? ? ? print "---------------->Cleanup"
>>
>> gdb.events.newobjfile.connect (obj_handler)
>
>
> There is still one thing I'm not happy with in the code, it's how to
> 'properly' access "gdbpy_current_objfile" ? I commented out "static"
> and declared it "extern" when I needed it, but that's certainly not
> the best way:
>
> gdb/python/python.c
> /*static*/ struct objfile *gdbpy_current_objfile;
> gdb/python/py-inferior.c
> extern struct objfile *gdbpy_current_objfile;
>
>
> please let me know what you thing about it
>
> Cordially,
>
> Kevin
>