This is the mail archive of the insight@sources.redhat.com mailing list for the Insight project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] Run button fixes


I've checked in the attached patch that fixes some long-standing Run button 
problems.

- Previously, Insight remembered the target name last used when debugging an 
executable.  It would then attempt to attach to that target the next time it 
was run with the same executable.  Unfortunately it did not remember the
target options (port number, etc) or set the baud rate.  Those were saved as
global preferences, so often Insight failed to connect. This patch should fix 
all these issues.

- With this patch the Run button is made busy (changes to stop sign) when 
target command is issued.  This makes it possible to cancel.

- When debugging a program, if you hit the Run button, it restarts 
immediately.  This patch instead puts up a dialog allowing you to confirm or 
cancel restarting.  This is consistent with the command line behavior.

-- 
Martin Hunt
GDB Engineer
Red Hat, Inc.

2002-10-10  Martin M. Hunt  <hunt@redhat.com>

	* library/session.tcl (save): Save target_cmd,
	attach, load, run, and cont as session prefs.
	(notice_file_change): Load in above session
	prefs.
	
	* library/interface.tcl (set_target): Set icons busy
	before attempting target command and set back to idle after.
	(run_executable): Return on ATTACH_ERROR.
	(gdbtk_run): If run button is hit when a program
	is currently being debugged, put up a dialog allowing
	user to continue or cancel.
Index: gdbtk/library/session.tcl
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/library/session.tcl,v
retrieving revision 1.12
diff -u -r1.12 session.tcl
--- gdbtk/library/session.tcl	7 May 2002 05:11:09 -0000	1.12
+++ gdbtk/library/session.tcl	10 Oct 2002 03:52:14 -0000
@@ -171,7 +171,14 @@
     set values(dirs) $gdb_source_path
     set values(pwd) $gdb_current_directory
     set values(target) $gdb_target_name
+    set values(target_cmd) $::gdb_target_cmd
 
+    # these prefs need to be made session-dependent
+    set values(run_attach) [pref get gdb/src/run_attach]
+    set values(run_load) [pref get gdb/src/run_load]
+    set values(run_run) [pref get gdb/src/run_run]
+    set values(run_cont) [pref get gdb/src/run_cont]
+    
     # Breakpoints.
     set values(breakpoints) [_serialize_bps]
 
@@ -194,8 +201,6 @@
   # the session, as returned by Session::list_names.
   #
   proc load {name} {
-    global gdb_target_name
-
     # gdb sessions are named after the executable.
     set key gdb/session/$name
 
@@ -230,6 +235,12 @@
       set values($k) [pref getd $key/$k]
     }
 
+    # reset these back to their defaults
+    pref set gdb/src/run_attach          0
+    pref set gdb/src/run_load            0
+    pref set gdb/src/run_run             1
+    pref set gdb/src/run_cont            0
+
     if {! [info exists values(executable)] || $values(executable) != $name} {
       # No such session.
       return
@@ -258,7 +269,17 @@
     if {[info exists values(target)]} {
       debug "Restoring Target: $values(target)"
       set gdb_target_name $values(target)
-    }
+      debug "Restoring Target_Cmd: $values(target_cmd)"
+      set ::gdb_target_cmd $values(target_cmd)
+      set_baud
+    }
+    
+    if {[info exists values(run_attach)]} {
+      pref set gdb/src/run_attach $values(run_attach)
+      pref set gdb/src/run_load $values(run_load)
+      pref set gdb/src/run_run $values(run_run)
+      pref set gdb/src/run_cont $values(run_cont)
+    } 
   }
 
   #
Index: gdbtk/library/interface.tcl
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/library/interface.tcl,v
retrieving revision 1.44
diff -u -r1.44 interface.tcl
--- gdbtk/library/interface.tcl	1 Aug 2002 01:19:02 -0000	1.44
+++ gdbtk/library/interface.tcl	10 Oct 2002 03:52:15 -0000
@@ -1075,8 +1075,8 @@
 # ------------------------------------------------------------------
 proc set_target {} {
   global gdb_target_cmd gdb_target_changed gdb_pretty_name gdb_target_name
-#  debug "gdb_target_changed=$gdb_target_changed gdb_target_cmd=\"$gdb_target_cmd\""
-#  debug "gdb_target_name=$gdb_target_name"
+  #debug "gdb_target_changed=$gdb_target_changed gdb_target_cmd=\"$gdb_target_cmd\""
+  #debug "gdb_target_name=$gdb_target_name"
   if {$gdb_target_cmd == "" && ![TargetSelection::native_debugging]} {
     if {$gdb_target_name == ""} {
       set prompt 1
@@ -1099,8 +1099,10 @@
     update
     catch {gdb_cmd "detach"}
     debug "CONNECTING TO TARGET: $gdb_target_cmd"
+    gdbtk_busy
     set err [catch {gdb_immediate "target $gdb_target_cmd"} msg ]
     $srcWin set_status
+    gdbtk_idle
 
     if {$err} {
       if {[string first "Program not killed" $msg] != -1} {
@@ -1161,7 +1163,8 @@
 
     # Attach
     if {$gdb_target_name == "" || [pref get gdb/src/run_attach]} {
-      if {[gdbtk_attach_remote] == "ATTACH_CANCELED"} {
+      set r [gdbtk_attach_remote]
+      if {$r == "ATTACH_CANCELED" || $r == "ATTACH_ERROR"} {
 	return
       }
     }
@@ -1548,6 +1551,14 @@
 #  PROC: gdbtk_run
 # ------------------------------------------------------------------
 proc gdbtk_run {} {
+  if {$::gdb_running == 1} {
+    set msg "A program is currently being debugged.\n"
+    append msg "Do you want to restart?"
+    if {![gdbtk_tcl_query $msg no]} {
+      # NO
+      return
+    }
+  }
   run_executable
 }
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]