← Back to team overview

sslug-teknik team mailing list archive

Re: gprof - SIGPROF

 

Jan Vittrup Hansen <jan@xxxxxxxxxxxxxxxxx> writes:

>  Jeg sidder og prøver at profilere lidt kode, men koden
> stopper pludseligt når jeg kører det med profiling
> (gcc -pg). 

[...]

> 7710  select(1, [0], [], NULL, {1, 0})  = ? ERESTARTNOHAND (To be
> restarted)
> 7710  --- SIGPROF (Profiling timer expired) ---

Når du modtager et signal mens dit program befinder sig i et
systemkald bliver systemkaldet afbrudt og returnerer med en fejl. Det
skal så genstartes, og det sker som regel automatisk når du angiver
SA_RESTART flaget til sigaction.

Dog er der eet systemkald der aldrig bliver automatisk genstartet og
det er select (og vist poll). Hvis du regner med at profile noget kode
som bruger select bør du derfor teste når select returner fejl og
starte forfra hvis fejlen er EINTR:

int rv;
while ((rv = select(....)) < 0 && errno == EINTR)
        ;
if (rv < 0) {
        perror("select");
        exit(1);
}

Dette emne er beskrevet i dybden i W. Richard Steven's Advanced
Programming in the UNIX Environment. Ja, det og alt andet :)

-- 
===============================================================
<erwin@xxxxxxxxxxxxx>     Herlev, Denmark     Software Designer
<URL:http://www.andreasen.org/>   <*>   Eicon Networks Research
===============================================================



References