gdb: add debug prints in event loop

Add debug printouts about event loop-related events:

 - When a file descriptor handler gets invoked
 - When an async event/signal handler gets invoked

gdb/ChangeLog:

	* async-event.c (invoke_async_signal_handlers): Add debug
	print.
	(check_async_event_handlers): Likewise.
	* event-top.c (show_debug_event_loop): New function.
	(_initialize_event_top): Register "set debug event-loop"
	setting.

gdbserver/ChangeLog:

	* server.cc (handle_monitor_command): Handle "set
	debug-event-loop".
	(captured_main): Handle "--debug-event-loop".
	(monitor_show_help): Mention new setting.
	(gdbserver_usage): Mention new flag.

gdbsupport/ChangeLog:

	* event-loop.h (debug_event_loop): New variable declaration.
	(event_loop_debug_printf_1): New function declaration.
	(event_loop_debug_printf): New macro.
	* event-loop.cc (debug_event_loop): New variable.
	(handle_file_event): Add debug print.
	(event_loop_debug_printf_1): New function.

Change-Id: If78ed3a69179881368e7895b42940ce13b6a1a05
This commit is contained in:
Simon Marchi
2020-10-02 14:44:40 -04:00
committed by Simon Marchi
parent ba98841943
commit 6b01403b25
8 changed files with 192 additions and 10 deletions

View File

@ -525,7 +525,7 @@ void
ui_register_input_event_handler (struct ui *ui)
{
add_file_handler (ui->input_fd, stdin_event_handler, ui,
string_printf ("ui-%d", ui->num));
string_printf ("ui-%d", ui->num), true);
}
/* See top.h. */
@ -1287,3 +1287,53 @@ gdb_disable_readline (void)
gdb_rl_callback_handler_remove ();
delete_file_handler (ui->input_fd);
}
static const char debug_event_loop_off[] = "off";
static const char debug_event_loop_all_except_ui[] = "all-except-ui";
static const char debug_event_loop_all[] = "all";
static const char *debug_event_loop_enum[] = {
debug_event_loop_off,
debug_event_loop_all_except_ui,
debug_event_loop_all,
nullptr
};
static const char *debug_event_loop_value = debug_event_loop_off;
static void
set_debug_event_loop_command (const char *args, int from_tty,
cmd_list_element *c)
{
if (debug_event_loop_value == debug_event_loop_off)
debug_event_loop = debug_event_loop_kind::OFF;
else if (debug_event_loop_value == debug_event_loop_all_except_ui)
debug_event_loop = debug_event_loop_kind::ALL_EXCEPT_UI;
else if (debug_event_loop_value == debug_event_loop_all)
debug_event_loop = debug_event_loop_kind::ALL;
else
gdb_assert_not_reached ("Invalid debug event look kind value.");
}
static void
show_debug_event_loop_command (struct ui_file *file, int from_tty,
struct cmd_list_element *cmd, const char *value)
{
fprintf_filtered (file, _("Event loop debugging is %s.\n"), value);
}
void _initialize_event_top ();
void
_initialize_event_top ()
{
add_setshow_enum_cmd ("event-loop", class_maintenance,
debug_event_loop_enum,
&debug_event_loop_value,
_("Set event-loop debugging."),
_("Show event-loop debugging."),
_("\
Control whether to show event loop-related debug messages."),
set_debug_event_loop_command,
show_debug_event_loop_command,
&setdebuglist, &showdebuglist);
}