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)
{