ladebug like w command for gdb

Jim Nance jlnance@avanticorp.com
Tue Feb 2 08:39:00 GMT 1999


Hello All,
    I use both gdb and the Digital Unix ladebug debugger.  The one thing
that kept me from switching compleatly to gdb was the w command the ladebug
debugger had.  The w command does a source listing in the current frame and
marks the line which the debugger is about to execute.  Its quite a simple
idea, but once you get used to it, not having it is painful.  It was fairly
painless to add this command to gdb.  Here is the patch and a changelog entry.
I hope someone finds it useful.

Thanks,

Jim

Tue Feb 2 11:30:00 1999 Jim Nance (jim_nance@yahoo.com)

	* Added the w command to gdb.  This command produces an annotated
	  listing of the source code in the current frame.

diff -u gdb-4.17/gdb/source.c jimsgdb/gdb/source.c
--- gdb-4.17/gdb/source.c	Fri Jul  4 14:54:50 1997
+++ jimsgdb/gdb/source.c	Thu Oct  1 07:15:17 1998
@@ -930,12 +930,13 @@
 }
 
 /* Print source lines from the file of symtab S,
-   starting with line number LINE and stopping before line number STOPLINE.  */
+   starting with line number LINE and stopping before line number STOPLINE.
+   Line number MARKLINE is preceeded by a '>' */
 
 void
-print_source_lines (s, line, stopline, noerror)
+print_source_annotated (s, line, stopline, markline, noerror)
      struct symtab *s;
-     int line, stopline;
+     int line, stopline, markline;
      int noerror;
 {
   register int c;
@@ -982,8 +983,12 @@
     {
       c = fgetc (stream);
       if (c == EOF) break;
-      last_line_listed = current_source_line;
-      printf_filtered ("%d\t", current_source_line++);
+      last_line_listed = current_source_line++;
+      if(last_line_listed!=markline) {
+        printf_filtered ("%d\t", last_line_listed);
+      } else {
+        printf_filtered ("%d >\t", last_line_listed);
+      }
       do
 	{
 	  if (c < 040 && c != '\t' && c != '\n' && c != '\r')
@@ -1002,6 +1007,15 @@
     }
 
   fclose (stream);
+}
+
+void
+print_source_lines (s, line, stopline, noerror)
+     struct symtab *s;
+     int line, stopline;
+     int noerror;
+{
+    print_source_annotated(s, line, stopline, 0, noerror);
 }
 
 
diff -u gdb-4.17/gdb/stack.c jimsgdb/gdb/stack.c
--- gdb-4.17/gdb/stack.c	Mon Nov 24 17:20:14 1997
+++ jimsgdb/gdb/stack.c	Thu Oct  1 07:19:39 1998
@@ -57,6 +57,8 @@
 
 static void frame_command PARAMS ((char *, int));
 
+static void w_command PARAMS ((char *, int));
+
 static void select_frame_command PARAMS ((char *, int));
 
 static void print_frame_arg_vars PARAMS ((struct frame_info *, GDB_FILE *));
@@ -1243,6 +1245,33 @@
    With arg, behaves like select_frame and then prints the selected
    frame.  */
 
+static void printw(s, line, stopline, noerror)
+struct symtab *s;
+int line;
+int stopline;
+int noerror;
+{
+    int bline = line>4? line-4 : 1;
+    int eline = line+4;
+    print_source_annotated(s, bline, eline, line, noerror);
+}
+
+static void
+w_command(level_exp, from_tty)
+     char *level_exp;
+     int from_tty;
+{
+  extern void (*print_frame_info_listing_hook)
+    PARAMS ((struct symtab *s, int line, int stopline, int noerror));
+  void (*savefn)
+    PARAMS ((struct symtab *s, int line, int stopline, int noerror));
+  
+  savefn = print_frame_info_listing_hook;
+  print_frame_info_listing_hook = printw;
+  frame_command(NULL, 0);
+  print_frame_info_listing_hook = savefn;
+}
+
 static void
 frame_command (level_exp, from_tty)
      char *level_exp;
@@ -1461,6 +1490,8 @@
 	   "Same as the `down' command, but does not print anything.\n\
 This is useful in command scripts.");
 
+  add_com ("w", class_stack, w_command,
+           "Print  the selected stack frame and surrounding source code\n");
   add_com ("frame", class_stack, frame_command,
 	   "Select and print a stack frame.\n\
 With no argument, print the selected stack frame.  (See also \"info frame\").\n\
Only in jimsgdb/gdb/: stamp-h
Only in jimsgdb/gdb/: tags
Only in jimsgdb/gdb/: testsuite
Only in jimsgdb/gdb/: tm.h
Only in jimsgdb/gdb/: vx-share
Only in jimsgdb/gdb/: xm.h
-- 
----------------------------------------------------------------------------
Jim Nance                                                 Avant! Corporation
(919) 941-6655    Do you have sweet iced tea?       jim_nance@avanticorp.com
                  No, but there's sugar on the table.



More information about the Gdb-patches mailing list