public inbox for cygwin-cvs@sourceware.org help / color / mirror / Atom feed
From: Jon TURNEY <jturney@sourceware.org> To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: Add --nokill dumper option Date: Fri, 31 Jul 2020 13:01:31 +0000 (GMT) [thread overview] Message-ID: <20200731130131.58D693844030@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=a5218ff7721bd5df023f576a0e9afb8f099c3b09 commit a5218ff7721bd5df023f576a0e9afb8f099c3b09 Author: Jon Turney <jon.turney@dronecode.org.uk> Date: Mon Jul 6 14:51:32 2020 +0100 Cygwin: Add --nokill dumper option Add --nokill option to dumper, for compatibility with minidumper, and to assist with testing. Diff: --- winsup/doc/utils.xml | 10 +++++++--- winsup/utils/dumper.cc | 20 +++++++++++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/winsup/doc/utils.xml b/winsup/doc/utils.xml index 8b92bfdf1..22bd86904 100644 --- a/winsup/doc/utils.xml +++ b/winsup/doc/utils.xml @@ -496,6 +496,7 @@ dumper [OPTION] FILENAME WIN32PID <refsect1 id="dumper-options"> <title>Options</title> <screen> +-n, --nokill don't terminate the dumped process -d, --verbose be verbose while dumping -h, --help output help information and exit -q, --quiet be quiet while dumping (default) @@ -519,9 +520,12 @@ error_start=x:\path\to\dumper.exe be started whenever some program encounters a fatal error. </para> <para> <command>dumper</command> can be also be started from the command - line to create a core dump of any running process. Unfortunately, because - of a Windows API limitation, when a core dump is created and - <command>dumper</command> exits, the target process is terminated too. </para> + line to create a core dump of any running process.</para> + + <para>For historical reasons, unless the <literal>-n</literal> option + is given, after the core dump is created and when the + <command>dumper</command> exits, the target process is also + terminated.</para> <para> To save space in the core dump, <command>dumper</command> doesn't write those portions of the target process's memory space that are loaded diff --git a/winsup/utils/dumper.cc b/winsup/utils/dumper.cc index 36dbf9dbb..3eb4af275 100644 --- a/winsup/utils/dumper.cc +++ b/winsup/utils/dumper.cc @@ -64,6 +64,7 @@ __attribute__ ((packed)) note_header; BOOL verbose = FALSE; +BOOL nokill = FALSE; int deb_printf (const char *format,...) { @@ -716,7 +717,19 @@ dumper::collect_process_information () current_event.dwThreadId, DBG_CONTINUE); } + failed: + if (nokill) + { + if (!DebugActiveProcessStop (pid)) + { + fprintf (stderr, "Cannot detach from process #%u, error %ld", + (unsigned int) pid, (long) GetLastError ()); + } + } + /* Otherwise, the debuggee is terminated when this process exits + (as DebugSetProcessKillOnExit() defaults to TRUE) */ + /* set debugee free */ if (sync_with_debugee) SetEvent (sync_with_debugee); @@ -960,6 +973,7 @@ Usage: %s [OPTION] FILENAME WIN32PID\n\ \n\ Dump core from WIN32PID to FILENAME.core\n\ \n\ + -n, --nokill don't terminate the dumped process\n\ -d, --verbose be verbose while dumping\n\ -h, --help output help information and exit\n\ -q, --quiet be quiet while dumping (default)\n\ @@ -969,13 +983,14 @@ Dump core from WIN32PID to FILENAME.core\n\ } struct option longopts[] = { + {"nokill", no_argument, NULL, 'n'}, {"verbose", no_argument, NULL, 'd'}, {"help", no_argument, NULL, 'h'}, {"quiet", no_argument, NULL, 'q'}, {"version", no_argument, 0, 'V'}, {0, no_argument, NULL, 0} }; -const char *opts = "dhqV"; +const char *opts = "ndhqV"; static void print_version () @@ -1001,6 +1016,9 @@ main (int argc, char **argv) while ((opt = getopt_long (argc, argv, opts, longopts, NULL) ) != EOF) switch (opt) { + case 'n': + nokill = TRUE; + break; case 'd': verbose = TRUE; break;
reply other threads:[~2020-07-31 13:01 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200731130131.58D693844030@sourceware.org \ --to=jturney@sourceware.org \ --cc=cygwin-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).