/* * add stack margin markers */ static void add_stack_markers() { int active_frame_index = active_module->get_active_frame(); GList *iter; int frame_index; for (iter = stack, frame_index = 0; iter; iter = iter->next, frame_index++) { if (iter) { frame *f = (frame*)iter->data; if (f->have_source) { if (active_frame_index == frame_index) { markers_add_current_instruction(f->file, f->line); } else { markers_add_frame(f->file, f->line); } } } } }
/* * Set breakpoint and stack markers for a file */ static void set_markers_for_file(const gchar* file) { GList *breaks; if ( (breaks = breaks_get_for_document(file)) ) { GList *iter = breaks; while (iter) { breakpoint *bp = (breakpoint*)iter->data; markers_add_breakpoint(bp); iter = iter->next; } g_list_free(breaks); } /* set frames markers if exists */ if (DBS_STOPPED == debug_get_state()) { int active_frame_index = debug_get_active_frame(); GList *iter = debug_get_stack(); int frame_index = 0; for (; iter; iter = iter->next, frame_index++) { if (iter) { frame *f = (frame*)iter->data; if (f->have_source && !strcmp(f->file, file)) { if (active_frame_index == frame_index) { markers_add_current_instruction(f->file, f->line); } else { markers_add_frame(f->file, f->line); } } } } } }
/* * called when a frame in the stack tree has been selected */ static void on_select_frame(int frame_number) { frame *f = (frame*)g_list_nth(stack, active_module->get_active_frame())->data; markers_remove_current_instruction(f->file, f->line); markers_add_frame(f->file, f->line); active_module->set_active_frame(frame_number); /* clear calltips cache */ g_hash_table_remove_all(calltips); /* autos */ GList *autos = active_module->get_autos(); update_variables(GTK_TREE_VIEW(atree), NULL, autos); /* watches */ GList *watches = active_module->get_watches(); update_variables(GTK_TREE_VIEW(wtree), NULL, watches); f = (frame*)g_list_nth(stack, frame_number)->data; markers_remove_frame(f->file, f->line); markers_add_current_instruction(f->file, f->line); }