static void parse_stack_list(gint seq, gchar ** list, gchar * resp) { GHashTable *h = gdbio_get_results(resp, list); HLST(h, stack); gdbio_pop_seq(seq); if (stack) { g_slist_foreach(stack, stack_cb, h); if (frame_list) { gint len = g_slist_length(frame_list); if (len >= MAX_STACK_RETURN) { gdbio_error_func (ngettext( "Stack too deep to display!\n(Showing only %d frame)", "Stack too deep to display!\n(Showing only %d frames)", len), len); } gdbio_send_seq_cmd(parse_stack_args, "-stack-list-arguments 1 0 %d\n", len - 1); } } if (h) g_hash_table_destroy(h); }
static void get_env_args(gint seq, gchar ** list, gchar * resp) { gchar *args; gint i; gdbio_pop_seq(seq); for (i = 0; list[i]; i++) { if (strncmp(list[i], "~\"", 2) == 0) { args = unquote(list[i] + 1); if (args && *args) { gchar *quote = strchr(g_strstrip(args), '"'); if (quote) { memmove(args, quote + 1, strlen(quote)); quote = strrchr(args, '"'); if (quote && g_str_equal(quote, "\".")) { *quote = '\0'; break; } } } g_free(args); args = NULL; } } env_info.args = args; if (gdbio_environ_func) { gdbio_environ_func(&env_info); } }
static void parse_stack_args(gint seq, gchar ** list, gchar * resp) { GHashTable *h = gdbio_get_results(resp, list); HLST(h, stack_args); gdbio_pop_seq(seq); if (stack_args) { if (frame_list) { g_slist_foreach(stack_args, merge_stack_args_cb, NULL); gdbio_stack_list_func(frame_list); free_frame_list(); } } if (h) g_hash_table_destroy(h); }
static void get_env_path(gint seq, gchar ** list, gchar * resp) { GHashTable *h = gdbio_get_results(resp, list); HSTR(h, path); gdbio_pop_seq(seq); if (path) { env_info.path = g_strdup(path); } else { gdbio_info_func(_("Failed to retrieve executable search path setting from GDB.")); // gdblx_dump_table(h); } if (h) g_hash_table_destroy(h); gdbio_send_seq_cmd(get_env_dirs, "-environment-directory\n"); }
static void get_env_cwd(gint seq, gchar ** list, gchar * resp) { GHashTable *h = gdbio_get_results(resp, list); HSTR(h, cwd); gdbio_pop_seq(seq); free_env_info(); if (cwd) { env_info.cwd = g_strdup(cwd); } else { gdbio_info_func(_("Failed to retrieve working directory setting from GDB.")); // gdblx_dump_table(h); } if (h) g_hash_table_destroy(h); gdbio_send_seq_cmd(get_env_path, "-environment-path\n"); }
static void get_env_dirs(gint seq, gchar ** list, gchar * resp) { GHashTable *h = gdbio_get_results(resp, list); HSTR(h, source_path); gdbio_pop_seq(seq); if (source_path) { gchar *p; env_info.dirs = g_strdup(source_path); p = strstr(env_info.dirs, "$cdir:$cwd"); if (p) { memmove(p, p + 10, strlen(p + 10) + 1); } p = strchr(env_info.dirs, '\0'); if (p) { while (p > env_info.dirs) { p--; if (*p == ':') { *p = '\0'; } else { break; } } } } else { gdbio_info_func(_("Failed to retrieve source search path setting from GDB.")); // gdblx_dump_table(h); } if (h) g_hash_table_destroy(h); gdbio_send_seq_cmd(get_env_args, "show args\n"); }