Re: gcov can't collect data when process is executed by systemctl start but it can when executed by ./process

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2017-07-31一的 06:05 -0400, Xiaoli Feng wrote:
> 
> ----- Original Message -----
> > From: "Mason" <slash.tmp@xxxxxxx>
> > To: "Xiaoli Feng" <xifeng@xxxxxxxxxx>
> > Cc: "GCC help" <gcc-help@xxxxxxxxxxx>
> > Sent: Monday, July 31, 2017 5:12:38 PM
> > Subject: Re: gcov can't collect data when process is executed by systemctl start but it can when executed by
> > ./process
> > 
> > On 31/07/2017 10:57, Xiaoli Feng wrote:
> > > Hello,
> > > 
> > >   Sorry to noise you. But I don't know how to fixed  this issue. The gcov
> > >   can
> > > collect code coverage data if the process is executed in shell. But when
> > > the process is start by systemd service. The *.gcda can't be generated. I
> > > google
> > > many info. But there is no solution. So I only send mail to ask for your
> > > help.
> > >   Does any one know what's happen? And where to find the gcov error
> > >   message?

By default systemd terminates a service by sending SIGTERM.
(See systemd.kill(5).)  If your service doesn't handle it and will just be
killed, it won't produce .gcda file.

Your service should handle SIGTERM and terminate cleanly, like:

  void handler(int signum)
  {
    /* notify the operator that the service has receive SIGTERM
       and clean up (close file descriptors, etc).  */

    exit(0);
  }

  int main(int argc, char **argv)
  {
    signal(handler, SIGTERM);

    /* do service */
  }

By using exit(), the functions registered by atexit() and on_exit() would be
called.  GCC registers one atexit function to produce .gcda file.

Even if without gcov, it's recommended to catch SIGTERM and terminate your
service cleanly.

> > >   If I send the wrong email address. Sorry about that.

This is the correct mail list to request help using GCC.  And I think maybe
we should document this issue somewhere (in 'info gcc' or GCC wiki).

> > Could it be that when the process is run by systemd, it runs
> > under a different user id, one which is not allowed to write
> > to the directory?
> 
>   I don't think so. I run "ps -aux". And it shows the process's USER is root.
> Do you know if there is a method to check the error info when generate *.gcda?
> And if it is under a different user. How could I change the writing directory
> location?

If I am correct, there should be no error info available since the process was
killed suddenly and had no chance to print out something.

>   Thanks Mason for your reply.
> 
> > 
> > Regards.
> > 
-- 
Xi Ruoyao <ryxi@xxxxxxxxxxxxxxxxx>
School of Aerospace Science and Technology, Xidian University



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux