On Cygwin, with "attach PID":
- GDB first tries to interpret PID as a Windows native PID, and tries
to attach to that.
- if the attach fails, GDB then tries to interpret the PID as a
Cygwin PID, and attach to that.
If converting the user-provided PID from a Cygwin PID to a Windows PID
fails, you get this:
(gdb) attach 12345
Can't attach to process 0 (error 2: The system cannot find the file specified.)
Note "process 0".
With the fix in this commit, we'll now get:
(gdb) attach 12345
Can't attach to process 12345 (error 2: The system cannot find the file specified.)
I noticed this while looking at gdb.log after running
gdb.base/attach.exp on Cygwin.
Change-Id: I05b9dc1f3a634a822ea49bb5c61719f5e62c8514
Approved-By: Luis Machado <luis.machado@arm.com>
#ifdef __CYGWIN__
if (!ok)
{
- /* Try fall back to Cygwin pid. */
- pid = cygwin_internal (CW_CYGWIN_PID_TO_WINPID, pid);
+ /* Maybe PID was a Cygwin PID. Try the corresponding native
+ Windows PID. */
+ DWORD winpid = cygwin_internal (CW_CYGWIN_PID_TO_WINPID, pid);
- if (pid > 0)
- ok = DebugActiveProcess (pid);
+ if (winpid != 0)
+ {
+ /* It was indeed a Cygwin PID. Fully switch to the
+ Windows PID from here on. We don't do this
+ unconditionally to avoid ending up with PID=0 in the
+ error message below. */
+ pid = winpid;
+
+ ok = DebugActiveProcess (winpid);
+ }
}
#endif