anjuta r3669 - in trunk: . libanjuta/interfaces plugins/debug-manager plugins/gdb



Author: sgranjoux
Date: Sat Feb 16 10:19:33 2008
New Revision: 3669
URL: http://svn.gnome.org/viewvc/anjuta?rev=3669&view=rev

Log:
	* plugins/debug-manager/command.c:
	Destroy local variables on each step

	* plugins/debug-manager/debug_tree.c,
	plugins/debug-manager/watch.c,
	plugins/debug-manager/locals.c,
	plugins/gdb/debugger.c,
	libanjuta/interfaces/libanjuta.idl:
	Parse local variables scope (not used yet)


Modified:
   trunk/ChangeLog
   trunk/libanjuta/interfaces/libanjuta.idl
   trunk/plugins/debug-manager/command.c
   trunk/plugins/debug-manager/debug_tree.c
   trunk/plugins/debug-manager/locals.c
   trunk/plugins/debug-manager/watch.c
   trunk/plugins/gdb/debugger.c

Modified: trunk/libanjuta/interfaces/libanjuta.idl
==============================================================================
--- trunk/libanjuta/interfaces/libanjuta.idl	(original)
+++ trunk/libanjuta/interfaces/libanjuta.idl	Sat Feb 16 10:19:33 2008
@@ -3770,6 +3770,8 @@
 			gchar *type;
 			gchar *value;
 			gboolean changed;
+			gboolean exited;
+			gboolean deleted;
 			gint children;
 		}
 

Modified: trunk/plugins/debug-manager/command.c
==============================================================================
--- trunk/plugins/debug-manager/command.c	(original)
+++ trunk/plugins/debug-manager/command.c	Sat Feb 16 10:19:33 2008
@@ -160,7 +160,7 @@
 		NEED_PROGRAM_LOADED | NEED_PROGRAM_STOPPED,
 	DMA_REMOVE_BREAK_COMMAND =
 		REMOVE_BREAK_COMMAND |
-		NEED_PROGRAM_LOADED | NEED_PROGRAM_STOPPED,
+		NEED_PROGRAM_LOADED | NEED_PROGRAM_STOPPED | NEED_PROGRAM_RUNNING,
 	DMA_LIST_BREAK_COMMAND =
 		LIST_BREAK_COMMAND |
 		NEED_PROGRAM_LOADED | NEED_PROGRAM_STOPPED | NEED_PROGRAM_RUNNING,
@@ -256,7 +256,7 @@
 		NEED_PROGRAM_STOPPED,
 	DMA_CREATE_VARIABLE_COMMAND =
 	   CREATE_VARIABLE |
-		NEED_PROGRAM_STOPPED,
+		NEED_PROGRAM_STOPPED | NEED_PROGRAM_RUNNING,
 	DMA_EVALUATE_VARIABLE_COMMAND =
 	    EVALUATE_VARIABLE | CANCEL_IF_PROGRAM_RUNNING |
 	    NEED_PROGRAM_STOPPED,
@@ -265,7 +265,7 @@
 		NEED_PROGRAM_STOPPED,
 	DMA_DELETE_VARIABLE_COMMAND =
 		DELETE_VARIABLE |
-		NEED_PROGRAM_STOPPED,
+		NEED_PROGRAM_STOPPED | NEED_PROGRAM_RUNNING,
 	DMA_ASSIGN_VARIABLE_COMMAND =
 		ASSIGN_VARIABLE |
 		NEED_PROGRAM_STOPPED,

Modified: trunk/plugins/debug-manager/debug_tree.c
==============================================================================
--- trunk/plugins/debug-manager/debug_tree.c	(original)
+++ trunk/plugins/debug-manager/debug_tree.c	Sat Feb 16 10:19:33 2008
@@ -95,7 +95,9 @@
 struct _DmaVariableData {
 	guchar modified;    /* Set by tree update */
 	guchar changed;     /* Set by global update */
-	gboolean analyzed;	/* Used as a tag to find variable outside scope */
+
+	gboolean exited;	/* variable outside scope */
+	gboolean deleted;	/* variable should be deleted */
 	
 	gboolean auto_update;
 	
@@ -169,7 +171,6 @@
 	}
 
 	data->changed = TRUE;
-	data->analyzed = TRUE;
 	data->auto_update = auto_update;
 		
 	return data;
@@ -346,7 +347,7 @@
 
 
 static gboolean
-clear_analyzed(GtkTreeModel *model, GtkTreePath* path,
+set_deleted(GtkTreeModel *model, GtkTreePath* path,
 				 GtkTreeIter* iter, gpointer user_data)
 {
 	DmaVariableData *data;
@@ -356,8 +357,8 @@
 	
 	gtk_tree_model_get(model, iter, DTREE_ENTRY_COLUMN, &data, -1);
 	g_return_val_if_fail (data, TRUE);	/* Use on root node only, data != NULL */
-					 
-	data->analyzed = FALSE;
+
+	data->deleted= TRUE;
 
 	return FALSE;	
 }
@@ -470,7 +471,7 @@
 }
 
 static void
-destroy_non_analyzed (DebugTree *tree, GtkTreeModel* model)
+destroy_deleted (DebugTree *tree, GtkTreeModel* model)
 {
 	DmaVariableData *data;
 	GtkTreeIter iter;
@@ -481,7 +482,7 @@
 	for (success = gtk_tree_model_get_iter_first (model, &iter); success == TRUE; )
 	{
 		gtk_tree_model_get(model, &iter, DTREE_ENTRY_COLUMN, &data, -1);
-		if ((data != NULL) && (data->analyzed == FALSE))
+		if ((data != NULL) && (data->deleted == TRUE))
 		{
 			success = debug_tree_remove (tree, &iter);
 		}
@@ -576,7 +577,6 @@
 	{
 		data->name = strdup (variable->name);
 	}
-    data->analyzed = TRUE;
     data->changed = TRUE;
 	
 	gtk_tree_store_set(GTK_TREE_STORE(pack->model), &iter,
@@ -672,7 +672,7 @@
 		
 		if ((text != NULL) && (*text != '\0'))
 		{
-		    IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, -1};
+		    IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, -1};
 			
 			var.expression = text;
 			debug_tree_add_watch (tree, &var, TRUE);
@@ -865,12 +865,16 @@
 	{
 		gchar *exp;
 		gchar *typ;
+		DmaVariableData *node;
 		gboolean found;
 		
-        gtk_tree_model_get (GTK_TREE_MODEL (model), iter, TYPE_COLUMN, &typ, VARIABLE_COLUMN, &exp, -1);
+        gtk_tree_model_get (GTK_TREE_MODEL (model), iter, TYPE_COLUMN, &typ,
+							VARIABLE_COLUMN, &exp,
+							DTREE_ENTRY_COLUMN, &node, -1);
 
 		found = ((type == NULL) || (strcmp (typ, type) == 0))
-			&& ((expression == NULL) || (strcmp (exp, expression) == 0));
+			&& ((expression == NULL) || (strcmp (exp, expression) == 0))
+			&& (node->exited == FALSE);
 		if (typ != NULL) g_free (typ);
 		if (exp != NULL) g_free (exp);
 		
@@ -886,16 +890,15 @@
 	DebugTree* tree = (DebugTree *)user_data;
 	const gchar *expression = (const gchar *)data;
 	GtkTreeModel*const model = gtk_tree_view_get_model (GTK_TREE_VIEW(tree->view));
-	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, -1};
+	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, -1};
 	GtkTreeIter iter;
 
 	if (debug_tree_find_expression (model, &iter, expression, NULL))
 	{
 		DmaVariableData *data;
 
-        gtk_tree_model_get (model, &iter, DTREE_ENTRY_COLUMN, &data, -1);
-
-		if (data != NULL) data->analyzed = TRUE;
+        	gtk_tree_model_get (model, &iter, DTREE_ENTRY_COLUMN, &data, -1);
+		if (data != NULL) data->deleted = FALSE;
 	}
 	else
 	{
@@ -908,13 +911,13 @@
 debug_tree_replace_list (DebugTree *tree, const GList *expressions)
 {
 	GtkTreeModel* model = gtk_tree_view_get_model (GTK_TREE_VIEW(tree->view));
-		
-	/* Mark variables as not analyzed */
-	my_gtk_tree_model_foreach_child(model, NULL, clear_analyzed, NULL);	
+	
+	/* Mark variables as deleted */
+	my_gtk_tree_model_foreach_child(model, NULL, set_deleted, NULL);	
 
 	g_list_foreach ((GList *)expressions, on_replace_watch, tree);	
 
-	destroy_non_analyzed (tree, model);	
+	destroy_deleted (tree, model);	
 }
 
 void
@@ -1007,7 +1010,7 @@
 {
 	DebugTree* this = (DebugTree *)user_data;
 	gboolean auto_update = ((const gchar *)data)[0] & AUTO_UPDATE_WATCH ? TRUE : FALSE;
-	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, -1};
+	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, -1};
 
 	var.expression = &((gchar *)data)[1];
 	debug_tree_add_watch (this, &var, auto_update);
@@ -1023,7 +1026,7 @@
 on_add_manual_watch (gpointer data, gpointer user_data)
 {
 	DebugTree* this = (DebugTree *)user_data;
-	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, -1};
+	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, -1};
 
 	var.expression = &((gchar *)data)[0];
 	debug_tree_add_watch (this, &var, FALSE);
@@ -1033,7 +1036,7 @@
 on_add_auto_watch (gpointer data, gpointer user_data)
 {
 	DebugTree* this = (DebugTree *)user_data;
-	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, -1};
+	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, FALSE, -1};
 	
 	var.expression = &((gchar *)data)[0];
 	debug_tree_add_watch (this, &var, TRUE);
@@ -1067,7 +1070,12 @@
 				DmaVariableData *data;
 				gtk_tree_model_get (model, &iter, DTREE_ENTRY_COLUMN, &data, -1);
 		
-				if (data != NULL) data->changed = TRUE;
+				if (data != NULL)
+				{	
+					data->changed = var->changed;
+					data->exited = var->exited;
+					data->deleted = var->deleted;
+				}
 				
 				return;
 			}
@@ -1216,19 +1224,23 @@
 
 	if (data->name == NULL)
 	{
-		/* Variable need to be created first */
-		gchar *exp;
-		DmaVariablePacket *pack;
-			
-		gtk_tree_model_get (model, iter, VARIABLE_COLUMN, &exp, -1);
-		pack = dma_variable_packet_new(model, iter, tree, data);
-		data->modified = TRUE;
-		dma_queue_create_variable (
-				tree->debugger,
-				exp,
-				(IAnjutaDebuggerCallback)gdb_var_create,
-				pack);
-		g_free (exp);
+		/* Check is the variable creation is not pending */
+		if (data->packet == NULL)
+		{
+			/* Variable need to be created first */
+			gchar *exp;
+			DmaVariablePacket *pack;
+		
+			gtk_tree_model_get (model, iter, VARIABLE_COLUMN, &exp, -1);
+			pack = dma_variable_packet_new(model, iter, tree, data);
+			data->modified = TRUE;
+			dma_queue_create_variable (
+					tree->debugger,
+					exp,
+					(IAnjutaDebuggerCallback)gdb_var_create,
+					pack);
+			g_free (exp);
+		}
 		
 		return FALSE;
 	}	
@@ -1454,7 +1466,6 @@
 debug_tree_free (DebugTree * tree)
 {
 	GtkTreeModel *model;
-	// AnjutaUI *ui;
 	
 	g_return_if_fail (tree);
 

Modified: trunk/plugins/debug-manager/locals.c
==============================================================================
--- trunk/plugins/debug-manager/locals.c	(original)
+++ trunk/plugins/debug-manager/locals.c	Sat Feb 16 10:19:33 2008
@@ -70,6 +70,7 @@
 	if (g_list_length ((GList*)list) < 1)
 		return;
 
+	debug_tree_update_all(self->debug_tree);
 	debug_tree_replace_list (self->debug_tree, list);
 	debug_tree_update_all(self->debug_tree);
 }

Modified: trunk/plugins/debug-manager/watch.c
==============================================================================
--- trunk/plugins/debug-manager/watch.c	(original)
+++ trunk/plugins/debug-manager/watch.c	Sat Feb 16 10:19:33 2008
@@ -89,7 +89,7 @@
 	gchar *new_expr;
 	// const gchar *value;
 	InspectDialog dlg;
-	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, -1};
+	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, -1};
 
 	gxml = glade_xml_new (GLADE_FILE, INSPECT_EVALUATE_DIALOG, NULL);
 	dlg.dialog = glade_xml_get_widget (gxml, INSPECT_EVALUATE_DIALOG);
@@ -145,7 +145,7 @@
 	GtkWidget *name_entry;
 	GtkWidget *auto_update_check;
 	gint reply;
-	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, -1};
+	IAnjutaDebuggerVariableObject var = {NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, -1};
 
 	gxml = glade_xml_new (GLADE_FILE, ADD_WATCH_DIALOG, NULL);
 	dialog = glade_xml_get_widget (gxml, ADD_WATCH_DIALOG);

Modified: trunk/plugins/gdb/debugger.c
==============================================================================
--- trunk/plugins/gdb/debugger.c	(original)
+++ trunk/plugins/gdb/debugger.c	Sat Feb 16 10:19:33 2008
@@ -3569,21 +3569,45 @@
 
 	changed_count = gdbmi_value_get_size (gdbmi_changelist);
 	for(; idx<changed_count; ++idx)
-    	{
+    {
 		const GDBMIValue *const gdbmi_change = 
                          gdbmi_value_list_get_nth (gdbmi_changelist, idx);
-		const GDBMIValue *gdbmi_val = 
-                         gdbmi_value_hash_lookup (gdbmi_change, "in_scope");
-		IAnjutaDebuggerVariableObject *var;
-              
-		if(0 != strcmp(gdbmi_value_literal_get(gdbmi_val), "false"))
-	    	{
-			gdbmi_val = gdbmi_value_hash_lookup (gdbmi_change, "name");
-			var = g_new0 (IAnjutaDebuggerVariableObject, 1);
-			var->changed = TRUE;
-			var->name = (gchar *)gdbmi_value_literal_get(gdbmi_val);
+		const GDBMIValue * value;
+			
 			
+		value = gdbmi_value_hash_lookup (gdbmi_change, "name");
+		if (value)
+		{
+			IAnjutaDebuggerVariableObject *var = g_new0 (IAnjutaDebuggerVariableObject, 1);
+			var->changed = TRUE;
+			var->name = (gchar *)gdbmi_value_literal_get(value);
 			list = g_list_prepend (list, var);
+			
+			value = gdbmi_value_hash_lookup (gdbmi_change, "type_changed");
+			if (value != NULL)
+			{
+				const gchar *type_changed = gdbmi_value_literal_get (value);
+				
+				if (strcmp (type_changed, "true"))
+				{
+					var->deleted = TRUE;
+				}
+			}
+
+			value = gdbmi_value_hash_lookup (gdbmi_change, "in_scope");
+			if (value != NULL)
+			{
+				const gchar *in_scope = gdbmi_value_literal_get(value);
+
+				if (strcmp (in_scope, "false") == 0)
+				{
+					var->exited = TRUE;
+				}
+				else if (strcmp (in_scope, "invalid") == 0)
+				{
+					var->deleted = TRUE;
+				}
+			}
 		}
 	}
 	list = g_list_reverse (list);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]