This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[RFA] Add new cmd line parameter "--pid" for attach.
- From: Michael Snyder <msnyder at cygnus dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Fri, 4 Jan 2002 19:21:06 -0800
- Subject: [RFA] Add new cmd line parameter "--pid" for attach.
Currently if you invoke gdb as:
gdb filename 12345
gdb will attempt to open a corefile called "12345", and if that
fails it will print a "file not found" warning, and then attempt
to attach to a process "12345".
There is a "--core <filename>" command-line argument,
so that you can specify a corefile without a symbol file:
gdb --core <filename>
but there is no "--pid" option to allow you to specify
a process-id without a symbol file.
This patch does two things:
1) Add a "--pid" option to allow specification of an attach pid.
2) If the second argument (after the symbol-file) begins with
a digit, try attach first instead of trying to open it as a
corefile first. This eliminates the "file not found" warning.
2002-01-04 Michael Snyder <msnyder@redhat.com>
* main.c (captured_main): Add new command line option "--pid".
If the second command line argument (following the symbol-file)
begins with a digit, try to attach to it before trying to open
it as a corefile.
(print_gdb_help): Document the "--pid" argument.
Index: main.c
===================================================================
RCS file: /cvs/src/src/gdb/main.c,v
retrieving revision 1.14
diff -c -3 -p -r1.14 main.c
*** main.c 2001/11/22 00:23:12 1.14
--- main.c 2002/01/05 03:15:43
*************** captured_main (void *data)
*** 239,244 ****
--- 239,246 ----
{"e", required_argument, 0, 'e'},
{"core", required_argument, 0, 'c'},
{"c", required_argument, 0, 'c'},
+ {"pid", required_argument, 0, 'p'},
+ {"p", required_argument, 0, 'p'},
{"command", required_argument, 0, 'x'},
{"version", no_argument, &print_version, 1},
{"x", required_argument, 0, 'x'},
*************** captured_main (void *data)
*** 320,325 ****
--- 322,331 ----
case 'c':
corearg = optarg;
break;
+ case 'p':
+ /* "corearg" is shared by "--core" and "--pid" */
+ corearg = optarg;
+ break;
case 'x':
cmdarg[ncmd++] = optarg;
if (ncmd >= cmdsize)
*************** extern int gdbtk_test (char *);
*** 463,470 ****
execarg = argv[optind];
break;
case 2:
! /* FIXME: The documentation says this can be a
! "ProcID". as well. */
corearg = argv[optind];
break;
case 3:
--- 469,476 ----
execarg = argv[optind];
break;
case 2:
! /* The documentation says this can be a "ProcID" as well.
! We will try it as both a corefile and a pid. */
corearg = argv[optind];
break;
case 3:
*************** extern int gdbtk_test (char *);
*** 586,597 ****
if (corearg != NULL)
{
! if (catch_command_errors (core_file_command, corearg, !batch, RETURN_MASK_ALL) == 0)
{
! /* See if the core file is really a PID. */
! if (isdigit (corearg[0]))
! catch_command_errors (attach_command, corearg, !batch, RETURN_MASK_ALL);
}
}
if (ttyarg != NULL)
--- 592,611 ----
if (corearg != NULL)
{
! /* corearg may be either a corefile or a pid.
! If its first character is a digit, try attach first
! and then corefile. Otherwise try corefile first. */
!
! if (isdigit (corearg[0]))
{
! if (catch_command_errors (attach_command, corearg,
! !batch, RETURN_MASK_ALL) == 0)
! catch_command_errors (core_file_command, corearg,
! !batch, RETURN_MASK_ALL);
}
+ else /* Can't be a pid, better be a corefile. */
+ catch_command_errors (core_file_command, corearg,
+ !batch, RETURN_MASK_ALL);
}
if (ttyarg != NULL)
*************** extern int gdbtk_test (char *);
*** 616,621 ****
--- 630,646 ----
catch_command_errors (source_command, gdbinit, 0, RETURN_MASK_ALL);
}
+ /* These need to be set this late in the initialization to ensure that
+ they are defined for the current environment. They define the
+ radix variables needed by a save-breakpoints file to preserve the
+ radix across the breakpoints restoration assuming they are restored
+ using the -x (-command) command line options. */
+
+ set_internalvar (lookup_internalvar ("input_radix"),
+ value_from_longest (builtin_type_int, (LONGEST) input_radix));
+ set_internalvar (lookup_internalvar ("output_radix"),
+ value_from_longest (builtin_type_int, (LONGEST) output_radix));
+
for (i = 0; i < ncmd; i++)
{
#if 0
*************** Options:\n\n\
*** 752,757 ****
--- 777,783 ----
--cd=DIR Change current directory to DIR.\n\
--command=FILE Execute GDB commands from FILE.\n\
--core=COREFILE Analyze the core dump COREFILE.\n\
+ --pid=PID Attach to running process PID.\n\
", stream);
fputs_unfiltered ("\
--dbx DBX compatibility mode.\n\