This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[commit/6.2] Detach when in batch mode; Was: Clean shutdown if stillattached at exit in batch mode
- From: Andrew Cagney <cagney at gnu dot org>
- To: Ashley Pittman <ashley at quadrics dot com>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Mon, 26 Jul 2004 15:13:47 -0400
- Subject: [commit/6.2] Detach when in batch mode; Was: Clean shutdown if stillattached at exit in batch mode
- References: <1083244544.10141.209.camel@ashley>
Hi,
I've been hitting some problems running gdb against live processes on
ia64 nodes, often stack traces are incomplete due to signal handler
issues or such like. If running gdb interactively then gdb drops back
to the prompt and everything is fine but if run in batch mode it stops
parsing the batch file and exits.
The problem here is that it does not detach before quiting so the
process becomes a zombie. Attached is a patch to prevent this.
I've committed the attached (mainline and 6.2). Even when the script
didn't abort GDB would kill the attached inferior :-(
As for getting GDB to return a non-zero exit when the batch script fails
- yes but it is a separate bug. We'd need to record that the script
failed and exit non-zero based on that.
Andrew
Ashley,
*** gdb-6.1/gdb/main.c 2004-02-18 00:21:00.000000000 +0000
--- gdb-6.1-modified/gdb/main.c 2004-04-29 14:10:17.000000000 +0100
***************
*** 736,742 ****
init_history ();
if (batch)
! {
/* We have hit the end of the batch file. */
exit (0);
}
--- 736,752 ----
init_history ();
if (batch)
! {
! if ( attach_flag) {
! /* If there is a problem executing the command in the batch file
! * then we might not have parsed all of it and might be attached.
! * Simply calling exit() would leave zombies so be nice and detach
! * but let the user know that there was a problem.
! */
! target_detach(NULL,0);
! exit(1);
! }
!
/* We have hit the end of the batch file. */
exit (0);
}
2004-07-26 Andrew Cagney <cagney@gnu.org>
Problem reported by Ashley Pittman <ashley@quadrics.com>.
* main.c (captured_main): When in batch mode always detach.
Index: main.c
===================================================================
RCS file: /cvs/src/src/gdb/main.c,v
retrieving revision 1.42
diff -p -u -r1.42 main.c
--- main.c 17 Jul 2004 03:25:10 -0000 1.42
+++ main.c 26 Jul 2004 19:00:46 -0000
@@ -729,6 +729,13 @@ extern int gdbtk_test (char *);
if (batch)
{
+ if (attach_flag)
+ /* Either there was a problem executing the command in the
+ batch file aborted early, or the batch file forgot to do an
+ explicit detach. Explicitly detach the inferior ensuring
+ that there are no zombies. */
+ target_detach (NULL, 0);
+
/* We have hit the end of the batch file. */
exit (0);
}