changeset 37333:54ec1bffae34

Document problems with MS debugger working on optimized code. From Jason Rumney <jasonr@gnu.org>.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 13 Apr 2001 09:50:37 +0000
parents 446514f572dd
children ef2abdff31fa
files etc/DEBUG
diffstat 1 files changed, 22 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/etc/DEBUG	Fri Apr 13 09:30:00 2001 +0000
+++ b/etc/DEBUG	Fri Apr 13 09:50:37 2001 +0000
@@ -401,9 +401,10 @@
    (written by Marc Fleischeuers, Geoff Voelker and Andrew Innes)
 
 To debug Emacs with Microsoft Visual C++, you either start emacs from
-the debugger or attach the debugger to a running emacs process.  To
-start emacs from the debugger, you can use the file bin/debug.bat.  The
-Microsoft Developer studio will start and under Project, Settings,
+the debugger or attach the debugger to a running emacs process.
+
+To start emacs from the debugger, you can use the file bin/debug.bat.
+The Microsoft Developer studio will start and under Project, Settings,
 Debug, General you can set the command-line arguments and Emacs's
 startup directory.  Set breakpoints (Edit, Breakpoints) at Fsignal and
 other functions that you want to examine.  Run the program (Build,
@@ -461,3 +462,21 @@
 symbols in the Watch window, this is more convenient when steeping
 though the code.  For instance, on entering apply_lambda, you can
 watch (struct Lisp_Symbol *) (0xfffffff & args[0]).
+
+Optimizations often confuse the MS debugger.  For example, the
+debugger will sometimes report wrong line numbers, e.g., when it
+prints the backtrace for a crash.  It is usually best to look at the
+disassembly to determine exactly what code is being run--the
+disassembly will probably show several source lines followed by a
+block of assembler for those lines.  The actual point where Emacs
+crashes will be one of those source lines, but not neccesarily the one
+that the debugger reports.
+
+Another problematic area with the MS debugger is with variables that
+are stored in registers: it will sometimes display wrong values for
+those variables.  Usually you will not be able to see any value for a
+register variable, but if it is only being stored in a register
+temporarily, you will see an old value for it.  Again, you need to
+look at the disassembly to determine which registers are being used,
+and look at those registers directly, to see the actual current values
+of these variables.