Walt Ogburn a écrit :
Hi,

Winedbg's watchpoints don't seem to work for me: when I try to watch a
memory location, winedbg responds that a watchpoint has been set at a
different, always constant location (I suspect this is actually in
winedbg's memory space).  Nothing happens when the location I was trying
to watch changes.
does the attached patch help ?
A+

Name:          wdbg5
ChangeLog:     
	- fixed regression in watchpoint setting
License:       X11
GenDate:       2004/10/20 20:02:28 UTC
ModifiedFiles: programs/winedbg/dbg.y programs/winedbg/debugger.h programs/winedbg/break.c
AddedFiles:    
RemovedFiles:  
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/programs/winedbg/dbg.y,v
retrieving revision 1.17
diff -u -u -r1.17 dbg.y
--- programs/winedbg/dbg.y	28 Sep 2004 02:13:27 -0000	1.17
+++ programs/winedbg/dbg.y	20 Oct 2004 19:47:08 -0000
@@ -226,7 +226,7 @@
     ;
 
 watch_command:
-      tWATCH '*' expr_lvalue    { break_add_watch(&$3, 1); }
+      tWATCH '*' expr_lvalue    { break_add_watch_from_lvalue(&$3, 1); }
     | tWATCH identifier         { break_add_watch_from_id($2); }
     ;
 
@@ -269,6 +269,7 @@
 
 maintenance_command:
       tMAINTENANCE tTYPE        { print_types(); }
+    | tMAINTENANCE tSTRING      {extern void minidump_write(const char*); minidump_write($2);}
     ;
 
 noprocess_state:
Index: programs/winedbg/debugger.h
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/programs/winedbg/debugger.h,v
retrieving revision 1.22
diff -u -u -r1.22 debugger.h
--- programs/winedbg/debugger.h	28 Sep 2004 02:13:27 -0000	1.22
+++ programs/winedbg/debugger.h	20 Oct 2004 19:51:18 -0000
@@ -244,7 +244,7 @@
 extern BOOL             break_add_break_from_lvalue(const struct dbg_lvalue* value);
 extern void             break_add_break_from_id(const char* name, int lineno);
 extern void             break_add_break_from_lineno(int lineno);
-extern void             break_add_watch(const struct dbg_lvalue* lvalue, int is_write);
+extern void             break_add_watch_from_lvalue(const struct dbg_lvalue* lvalue);
 extern void             break_add_watch_from_id(const char* name);
 extern void             break_check_delayed_bp(void);
 extern void             break_delete_xpoint(int num);
Index: programs/winedbg/break.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/programs/winedbg/break.c,v
retrieving revision 1.8
diff -u -u -r1.8 break.c
--- programs/winedbg/break.c	28 Sep 2004 02:13:27 -0000	1.8
+++ programs/winedbg/break.c	20 Oct 2004 19:59:42 -0000
@@ -351,7 +351,7 @@
  *
  * Add a watchpoint.
  */
-void break_add_watch(const struct dbg_lvalue* lvalue, BOOL is_write)
+static void break_add_watch(const struct dbg_lvalue* lvalue, BOOL is_write)
 {
     int		num;
     DWORD	l = 4;
@@ -387,10 +387,26 @@
     dbg_printf("\n");
 }
 
+/******************************************************************
+ *		break_add_watch_from_lvalue
+ *
+ * Adds a watch point from an address (stored in a lvalue)
+ */
+void break_add_watch_from_lvalue(const struct dbg_lvalue* lvalue)
+{
+    struct dbg_lvalue   lval;
+
+    lval.addr.Mode = AddrModeFlat;
+    lval.addr.Offset = types_extract_as_integer(lvalue);
+    lval.type.id = dbg_itype_none;
+
+    break_add_watch(&lval, TRUE);
+}
+
 /***********************************************************************
  *           break_add_watch_from_id
  *
- * Add a watchpoint from a symbol name (and eventually a line #)
+ * Add a watchpoint from a symbol name
  */
 void	break_add_watch_from_id(const char *name)
 {

Reply via email to