• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: ptrace PT_CONTINUE
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ptrace PT_CONTINUE


  • Subject: Re: ptrace PT_CONTINUE
  • From: Terry Lambert <email@hidden>
  • Date: Thu, 9 Jul 2009 16:19:39 -0700

The parent exiting should detach the child process, which should be the same as quitting the debugger.

If this is not the case, please file a bug.

-- Terry

On Jul 9, 2009, at 1:04 AM, Thierry bultel wrote:
Hi Aron,

I think I understand what happens here.
Your code actually works, and temporaty resumes the child.

But as the parent immediately exits after, it dies, and causes the child death as well.

The fix is to simply add that portion of code:

for (;;) {
        sleep (1);
        printf("parent alive\n");
    }

after your call to ptrace(PT_CONTINUE )

As a rule, a ptrace based debugger is normally an infinite loop of wait calls ...

Hope this helps,
Thierry

Aron-Zvi a écrit :

Hey guys,

I'm trying to get started with basic ptrace functionality with the following:


#include <sys/types.h> #include <sys/ptrace.h> #include <sys/wait.h> #include <unistd.h> #include <stdio.h> #include <errno.h> int main(int argc, char **argv) { int pid, status, ret;

    if((pid = fork()) == 0)
    {
        ptrace(PT_TRACE_ME,0,0,0);
        execl(argv[1],argv[1],0);
        printf("exec failed\n");
    }
    else{
        wait(&status);
        if(WIFSTOPPED(status))
            printf("child has stopped. child pid: %d\n", pid);
        errno = 0;
        ret = ptrace(PT_CONTINUE, pid, (caddr_t)1, 0);
        printf("ret: %d\n", ret);
        printf("errno: %s\n", strerror(errno));
    }

}

>From my basic understanding, what the above should do is fork a child process which will stop at exec and cause the parent-tracing process to exit wait(). The parent process should then have the child process continue execution normally by calling ptrace() with PT_CONTINUE.

When I run the code, The child process is created, however, ptrace() with PT_CONTINUE seems to fail as the child process does not continue normal execution. ptrace's return value is 0 and errno is "Unknown error: 0".

Running output:

aronzvis-macbook:ptrace_test aronzvi$ ./ptrace ../voidinc
child has stopped. child pid: 37959
ret: 0
errno: Unknown error: 0


I'm running OS X 10.5.7 and building the code with the 10.5 SDK.

Your help is much appreciated,

Aron-Zvi

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden

<thierry_bultel.vcf> _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden

_______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden
  • Follow-Ups:
    • Re: ptrace PT_CONTINUE
      • From: Esteban Bodigami <email@hidden>
References: 
 >ptrace PT_CONTINUE (From: Aron-Zvi <email@hidden>)
 >Re: ptrace PT_CONTINUE (From: Thierry bultel <email@hidden>)

  • Prev by Date: Re: ptrace PT_CONTINUE
  • Next by Date: Re: ptrace PT_CONTINUE
  • Previous by thread: Re: ptrace PT_CONTINUE
  • Next by thread: Re: ptrace PT_CONTINUE
  • Index(es):
    • Date
    • Thread