mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2026-08-27 00:26:02 -04:00
This commit introduces a new Python event, selected_context. This event is attached to the user_selected_context_changed observer, which triggers when the user changes the currently selected inferior, thread, or frame. Adding this event allows a Python extension to update in response to user driven changes without having to poll the state from a before_prompt hook, which is what I currently do to achieve the same results. I did consider splitting the user_selected_context_changed observer into 3 separate Python events, inferior_changed, thread_changed, and frame_changed, but I couldn't see any significant advantage to doing this, so in the end I went with just a single event, and the event object contains the inferior, thread, and frame. Additionally, the user isn't informed about which aspect of the context changed. That is, every event carries the inferior, thread, and frame, so an event triggered when switching frames will looks identical to an event triggered when switching inferiors. If the user wants to know what changed then they will have to track the current state themselves, and then compare the event state to the stored current state. In many cases though I suspect that just being told something changed, and then updating everything will be sufficient, which is why I've not bothered trying to inform the user what changed. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24482 Reviewed-By: Eli Zaretskii <eliz@gnu.org> Approved-By: Tom Tromey <tom@tromey.com>
152 lines
4.3 KiB
C++
152 lines
4.3 KiB
C++
/* Python event definitions -*- c++ -*-
|
|
|
|
Copyright (C) 2017-2026 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/>. */
|
|
|
|
/* To use this file, define GDB_PY_DEFINE_EVENT_TYPE to expand how you
|
|
like, then include the file.
|
|
|
|
Each invocation is of the form:
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE(name, py_name, doc, base)
|
|
|
|
NAME is the name of the event.
|
|
PY_NAME a string representing what the event should be called in
|
|
python.
|
|
DOC Python documentation for the new event type
|
|
BASE the base event for this event usually just event_object_type.
|
|
*/
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (breakpoint,
|
|
"BreakpointEvent",
|
|
"GDB breakpoint stop event object",
|
|
stop_event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (continue,
|
|
"ContinueEvent",
|
|
"GDB continue event object",
|
|
thread_event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (exited,
|
|
"ExitedEvent",
|
|
"GDB exited event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (new_thread,
|
|
"NewThreadEvent",
|
|
"GDB new thread event object",
|
|
thread_event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (thread_exited,
|
|
"ThreadExitedEvent",
|
|
"GDB thread exited event object",
|
|
thread_event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (new_inferior,
|
|
"NewInferiorEvent",
|
|
"GDB new inferior event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (inferior_deleted,
|
|
"InferiorDeletedEvent",
|
|
"GDB inferior deleted event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (inferior_call_pre,
|
|
"InferiorCallPreEvent",
|
|
"GDB inferior function pre-call event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (inferior_call_post,
|
|
"InferiorCallPostEvent",
|
|
"GDB inferior function post-call event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (register_changed,
|
|
"RegisterChangedEvent",
|
|
"GDB register change event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (memory_changed,
|
|
"MemoryChangedEvent",
|
|
"GDB memory change event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (new_objfile,
|
|
"NewObjFileEvent",
|
|
"GDB new object file event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (free_objfile,
|
|
"FreeObjFileEvent",
|
|
"GDB free object file event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (clear_objfiles,
|
|
"ClearObjFilesEvent",
|
|
"GDB clear object files event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (signal,
|
|
"SignalEvent",
|
|
"GDB signal event object",
|
|
stop_event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (stop,
|
|
"StopEvent",
|
|
"GDB stop event object",
|
|
thread_event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (thread,
|
|
"ThreadEvent",
|
|
"GDB thread event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (gdb_exiting,
|
|
"GdbExitingEvent",
|
|
"GDB is about to exit",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (connection,
|
|
"ConnectionEvent",
|
|
"GDB connection added or removed object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (executable_changed,
|
|
"ExecutableChangedEvent",
|
|
"GDB executable changed event",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (new_progspace,
|
|
"NewProgspaceEvent",
|
|
"GDB new Progspace event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (free_progspace,
|
|
"FreeProgspaceEvent",
|
|
"GDB free Progspace event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (tui_enabled,
|
|
"TuiEnabledEvent",
|
|
"GDB TUI enabled event object",
|
|
event_object_type);
|
|
|
|
GDB_PY_DEFINE_EVENT_TYPE (selected_context,
|
|
"SelectedContextEvent",
|
|
"GDB user selected context event object",
|
|
event_object_type);
|