Mailing-List: contact cygwin-developers-help AT sourceware DOT cygnus DOT com; run by ezmlm Sender: cygwin-developers-owner AT sourceware DOT cygnus DOT com Delivered-To: mailing list cygwin-developers AT sourceware DOT cygnus DOT com From: Chris Faylor Date: Thu, 29 Apr 1999 13:01:22 -0400 To: Egor Duda Cc: cygwin-developers AT sourceware DOT cygnus DOT com Subject: Re: gdb "attach" and sharing thread info between processes Message-ID: <19990429130121.A12386@cygnus.com> References: <6858 DOT 990429 AT logos-m DOT ru> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.95.3i In-Reply-To: <6858.990429@logos-m.ru>; from Egor Duda on Thu, Apr 29, 1999 at 08:36:49PM +0400 The recently announced gdb 4.18 should have the ability to attach to a running process and manipulate threads. You can get the sources from ftp://sourceware.cygnus.com/pub/gdb/releases/gdb-4.18.tar.bz2 . -chris On Thu, Apr 29, 1999 at 08:36:49PM +0400, Egor Duda wrote: > I've tried to use gdb "attach" feature to debug cygwin program and >got INVALID_HANDLE_ERROR in gdb/win32_nat.c. As far, as i see, that's >due to incorrect value of current_process and current_thread >variables. They're initialized correctly when gdb starts a debugee >as a child (through CreateProcess call). But when we're "attach"ing to >some other process, those variables have wrong values :( > > As for `current_process', this could be easily fixed, by calling >`OpenProcess' when attaching to debugee. I've patched win32-nat.c and >managed to watch vars from debugee (before patching, >ReadProcessMemory() fails with INVALID_HANDLE_ERROR.) > > But threads are different matter... :( MS promise to implement >OpenThread syscall in Win2000 only, and they say, that the only way to >get thread handle is to ask a parent process to reveal it. As a >solution, i would propose to move threads array (threads var declared >in winsup/debug.cc) from per-process to shared area and implement a >call to cygwin dll to give away thread handle by processId and >ThreadId by scanning this thread list. > > With this call gdb will be able to initialize current_thread variable >properly when attaching to cygwin process. > >So, the question is -- is it a "right way"?