* strace.cc (attach_process): Try to turn off DEBUG_ONLY_THIS_PROCESS
if Attaching to a process with the trace-children flag set. (handle_output_debug_string): Apparently we don't need to explicitly attach for debugging when a child process starts * Makefile.in (strace.exe): Link with ntdll
This commit is contained in:
parent
c9925bf497
commit
02a7f96ef7
@ -1,3 +1,11 @@
|
|||||||
|
2011-09-12 Jon TURNEY <jon.turney@dronecode.org.uk>
|
||||||
|
|
||||||
|
* strace.cc (attach_process): Try to turn off DEBUG_ONLY_THIS_PROCESS
|
||||||
|
if Attaching to a process with the trace-children flag set.
|
||||||
|
(handle_output_debug_string): Apparently we don't need to explicitly
|
||||||
|
attach for debugging when a child process starts
|
||||||
|
* Makefile.in (strace.exe): Link with ntdll
|
||||||
|
|
||||||
2011-08-21 Christopher Faylor <me.cygwin2011@cgf.cx>
|
2011-08-21 Christopher Faylor <me.cygwin2011@cgf.cx>
|
||||||
|
|
||||||
* Makefile.in: Check for header file existence when building dumper.exe
|
* Makefile.in: Check for header file existence when building dumper.exe
|
||||||
|
@ -78,6 +78,7 @@ cygcheck.exe: MINGW_LDFLAGS += -lntdll
|
|||||||
cygpath.exe: ALL_LDFLAGS += -lcygwin -lntdll
|
cygpath.exe: ALL_LDFLAGS += -lcygwin -lntdll
|
||||||
cygpath.exe: CXXFLAGS += -fno-threadsafe-statics
|
cygpath.exe: CXXFLAGS += -fno-threadsafe-statics
|
||||||
ps.exe: ALL_LDFLAGS += -lcygwin -lntdll
|
ps.exe: ALL_LDFLAGS += -lcygwin -lntdll
|
||||||
|
strace.exe: MINGW_LDFLAGS += -lntdll
|
||||||
|
|
||||||
ldd.exe: ALL_LDFLAGS += -lpsapi
|
ldd.exe: ALL_LDFLAGS += -lpsapi
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ details. */
|
|||||||
#include "path.h"
|
#include "path.h"
|
||||||
#undef cygwin_internal
|
#undef cygwin_internal
|
||||||
#include "loadlib.h"
|
#include "loadlib.h"
|
||||||
|
#include "ddk/ntapi.h"
|
||||||
|
|
||||||
/* we *know* we're being built with GCC */
|
/* we *know* we're being built with GCC */
|
||||||
#define alloca __builtin_alloca
|
#define alloca __builtin_alloca
|
||||||
@ -293,6 +294,9 @@ load_cygwin ()
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define DEBUG_PROCESS_DETACH_ON_EXIT 0x00000001
|
||||||
|
#define DEBUG_PROCESS_ONLY_THIS_PROCESS 0x00000002
|
||||||
|
|
||||||
static void
|
static void
|
||||||
attach_process (pid_t pid)
|
attach_process (pid_t pid)
|
||||||
{
|
{
|
||||||
@ -303,6 +307,23 @@ attach_process (pid_t pid)
|
|||||||
if (!DebugActiveProcess (child_pid))
|
if (!DebugActiveProcess (child_pid))
|
||||||
error (0, "couldn't attach to pid %d for debugging", child_pid);
|
error (0, "couldn't attach to pid %d for debugging", child_pid);
|
||||||
|
|
||||||
|
if (forkdebug)
|
||||||
|
{
|
||||||
|
HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, child_pid);
|
||||||
|
|
||||||
|
if (h)
|
||||||
|
{
|
||||||
|
/* Try to turn off DEBUG_ONLY_THIS_PROCESS so we can follow forks */
|
||||||
|
/* This is only supported on XP and later */
|
||||||
|
ULONG DebugFlags = DEBUG_PROCESS_DETACH_ON_EXIT;
|
||||||
|
NTSTATUS status = NtSetInformationProcess(h, ProcessDebugFlags, &DebugFlags, sizeof(DebugFlags));
|
||||||
|
if (status)
|
||||||
|
warn (0, "Could not clear DEBUG_ONLY_THIS_PROCESS (%x), will not trace child processes", status);
|
||||||
|
|
||||||
|
CloseHandle(h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -467,9 +488,6 @@ handle_output_debug_string (DWORD id, LPVOID p, unsigned mask, FILE *ofile)
|
|||||||
|
|
||||||
if (special == _STRACE_CHILD_PID)
|
if (special == _STRACE_CHILD_PID)
|
||||||
{
|
{
|
||||||
if (!DebugActiveProcess (n))
|
|
||||||
error (0, "couldn't attach to subprocess %d for debugging, "
|
|
||||||
"windows error %d", n, GetLastError ());
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user