From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4180 invoked by alias); 5 Jan 2002 03:25:56 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 4131 invoked from network); 5 Jan 2002 03:25:52 -0000 Received: from unknown (HELO cygnus.com) (205.180.230.5) by sources.redhat.com with SMTP; 5 Jan 2002 03:25:52 -0000 Received: from reddwarf.cygnus.com (reddwarf.cygnus.com [205.180.231.12]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id TAA11968 for ; Fri, 4 Jan 2002 19:25:50 -0800 (PST) Received: (from msnyder@localhost) by reddwarf.cygnus.com (8.11.2/8.11.2) id g053L6l16505 for gdb-patches@sources.redhat.com; Fri, 4 Jan 2002 19:21:06 -0800 Date: Fri, 04 Jan 2002 19:25:00 -0000 From: Michael Snyder Message-Id: <200201050321.g053L6l16505@reddwarf.cygnus.com> To: gdb-patches@sources.redhat.com Subject: [RFA] Add new cmd line parameter "--pid" for attach. X-SW-Source: 2002-01/txt/msg00060.txt.bz2 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 " command-line argument, so that you can specify a corefile without a symbol file: gdb --core 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 * 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\