Re: gdbserver for arm does not support multi-process debugging
Luis Machado <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, From reading the GDB NEWS file, proper support for gdbserver remote/extended-remote fork/vfork event reporting was included in GDB 7.11, commit 19d9d4efd18bcc633e99cb6a3e39bd9b22ca70ce and others. I'd give a more recent GDB a try, since GDB 7.6 is mora than 5 years old now. On 10/29/19 7:42 AM, 刘康 wrote: > Hi, > My gdbserver andarm-linux-androideabi-gdbversion are both 7.6. and my > reproduction way is as follow: > > > > and my gdbremotescript.gdb is > > > the debug target "usb_upgrade_check" is the ELF of the source code > above(just ignore its strange name...it means nothing:-) ) > > my target and host is communicating via TCP/IP protocol and my target > gdbserver launch parameter is > > > my target's kernel version is 3.10.86 > > When everything is ready I do "set detach-on-fork off" and "set > follow-fork-mode child" at host and execute the continue command. > The problem comes: host always has only one inferior which trace parent > process, no new inferior will be created and the child process could not > be traced in any way. > I have also tried version 7.9 and the performance is the same. > > My kernel and libc works well for syscall like ptrace and waitpid , > because I have make sure that the linux_test_for_tracefork() has no > problem by adding gdbserver some log. > > At 2019-10-28 20:26:33, "Luis Machado" <[email protected]> wrote: >>Do let us know what you see. If it still doesn't work with the most >>recent versions, it may be a real bug somewhere (not necessarily in >>gdb/gdbserver). >> >>On 10/28/19 8:12 AM, 刘康 wrote: >>> Hi, >>> I see, maybe my gdbserver version is too old...I'll compile a latest >>> version and try again. >>> >>> Thank you so much for your help! >>> >>> >>> At 2019-10-24 18:38:46, "Luis Machado" <[email protected]> wrote: >>>>Hi, >>>> >>>>I just ran a quick check (foll-fork.exp and follow-vfork.exp tests) on a >>>>arm machine and things worked as expected. >>>> >>>>What version of GDB/kernel are you using? >>>> >>>>On 10/24/19 2:32 AM, 刘康 wrote: >>>>> Hi Luis, >>>>> >>>>> Yes, I know that gdbserver willcatch PTRACE_EVENT_FORK in >>>>> gdb/gdbserver/linux-low.c:handle_extended_wait and get the child >>>>> process's pid via PTRACE_GETEVENTMSG. >>>>> >>>>> I found the way of X86 version gdb to deal with PTRACE_EVENT_FORKwill >>>>> set waitstatus toTARGET_WAITKIND_FORKED and add a new inferior .What's >>>>> more ,it can trace child/parent process automatically as long as I set >>>>> "follow-fork-mode" to "child" or "parent". >>>>> >>>>> But it seems like gdbserver will not tell PTRACE_EVENT_FORK to thehost >>>>> arm-XXX-gdb this event ,as a result , user cannot trace child process or >>>>> add a new inferior no matter what value of "detach-on-fork off" and >>>>> "follow-fork-mode" I have tried. >>>>> >>>>> At 2019-10-18 20:27:19, "Luis Machado" <[email protected]> wrote: >>>>>>Hi, >>>>>> >>>>>>On 10/17/19 3:19 AM, 刘康 wrote: >>>>>>> Dear [email protected] >>>>>>> >>>>>>> >>>>>>> I am researching the gdbserver's source code for ARM, what confused me is that it does not support multi-process to debug the target's child process, cause it dose not interesting in PTRACE_EVENT_FORK, I don't know whether it's a bug or it's just a feature by design. >>>>>> >>>>>>The handling of PTRACE_EVENT_FORK, PTRACE_EVENT_VFORK and >>>>>>PTRACE_EVENT_CLONE is in generic linux code. See >>>>>>gdb/gdbserver/linux-low.c:handle_extended_wait. >>>>>> >>>>>>As long as the kernel supports reporting such events via ptrace and we >>>>>>are debugging using extended remote mode (not regular remote mode), it >>>>>>should work. If it doesn't, then we may have a problem that we should fix. >>>>>> >>>>>>Does that answer your question? >>>>>> >>>>>>Luis >>>>> >>>>> >>>>> >>> >>> >>> > > >