static void load_program(void) { char *args[] = { utils_get_locale_from_utf8(pref_gdb_executable), (char *) "--quiet", (char *) "--interpreter=mi2", NULL }; GError *gerror = NULL; statusbar_update_state(DS_EXTRA_2); plugin_blink(); while (gtk_events_pending()) gtk_main_iteration(); if (spawn_with_callbacks(NULL, NULL, args, NULL, GDB_SPAWN_FLAGS, obtain_send_channel_cb, NULL, receive_output_cb, NULL, GDB_BUFFER_SIZE, receive_errors_cb, NULL, 0, gdb_exit_cb, NULL, &gdb_pid, &gerror)) { gchar **environment = g_strsplit(program_environment, "\n", -1); gchar *const *envar; #ifdef G_OS_UNIX extern char *slave_pty_name; #else GString *escaped = g_string_new(program_executable); #endif /* startup */ gdb_state = ACTIVE; dc_clear(); utils_lock_all(TRUE); signal(SIGINT, SIG_IGN); wait_result = 0; wait_prompt = TRUE; g_string_truncate(commands, 0); leading_receive = TRUE; if (pref_gdb_async_mode) g_string_append(commands, "-gdb-set target-async on\n"); if (program_non_stop_mode) g_string_append(commands, "-gdb-set non-stop on\n"); #ifdef G_OS_UNIX append_startup("010-file-exec-and-symbols", program_executable); append_startup("-gdb-set inferior-tty", slave_pty_name); #else /* G_OS_UNIX */ utils_string_replace_all(escaped, "\\", "\\\\"); append_startup("010-file-exec-and-symbols", escaped->str); g_string_free(escaped, TRUE); g_string_append(commands, "-gdb-set new-console on\n"); #endif /* G_OS_UNIX */ append_startup("-environment-cd", program_working_dir); /* no escape needed */ append_startup("-exec-arguments", program_arguments); for (envar = environment; *envar; envar++) append_startup("-gdb-set environment", *envar); g_strfreev(environment); append_startup("011source -v", program_load_script); g_string_append(commands, "07-list-target-features\n"); breaks_query_async(commands); if (*program_executable || *program_load_script) { debug_load_error = FALSE; debug_auto_run = debug_auto_exit = program_auto_run_exit; } else debug_auto_run = debug_auto_exit = FALSE; if (option_open_panel_on_load) open_debug_panel(); registers_query_names(); } else { show_error(_("%s: %s."), pref_gdb_executable, gerror->message); g_error_free(gerror); } g_free(args[0]); if (gdb_state == INACTIVE) statusbar_update_state(DS_INACTIVE); }
static void on_console_clear(G_GNUC_UNUSED const MenuItem *menu_item) { dc_clear(); }