timbunce / devel-nytprof

Devel::NYTProf is a powerful feature-rich source code profiler for Perl. (Mostly in maintenance mode, so PRs are much more likely to be acted upon than Issues.)
http://blog.timbunce.org/tag/nytprof/
67 stars 51 forks source link

Can't resolve fid of '0' at /bin/nytprofhtml line 1381 #18

Open PenelopeFudd opened 10 years ago

PenelopeFudd commented 10 years ago

Hello!

I'm debugging a legacy perl program on OpenSolaris 10 with perl v5.8.8 built for i86pc-solaris-thread-multi, with Devel::NYTProf 5.06. It's running as an Fcgi program under apache 2.2.25.

nytprofhtml -f nytprof.out.15306 
Reading nytprof.out.15306
Processing nytprof.out.15306 data
Writing line reports to nytprof directory
 100% ... 
Extracting subroutine call data ...
Extracting subroutine links
Generating subroutine stack flame graph ...
Can't resolve fid of '0' at /bin/nytprofhtml line 1381

The apache configuration has this:

  FcgidCmdOptions /path/to/program.pl \
     InitialEnv PERL5OPT=-d:NYTProf \
     InitialEnv NYTPROF=file=/tmp/nytprof-main.out:addpid=1:start=no \
     MaxProcesses 1

The code has this:

STARTOFLOOP: while ((alarm 0 || 1) && &check_for_signal &&
  (DB::disable_profile() || 1) && 
(my $q = new CGI::Fast) ) {
  if (-e "/tmp/nytprof-please") {DB::enable_profile();}
  if (-e "/tmp/nytprof-exit") {unlink("/tmp/nytprof-exit","/tmp/nytprof-please");exit 0;}

  blah.blah.blah;
}

I copied the nytprof.out file to a linux machine and ran nytprofhtml there, and after complaining about all of the perl files that were not found, it too died with "Can't resolve fid of '0' at /usr/local/bin/nytprofhtml line 1381."

I'm sorry I can't provide more information or spend more time on this, but I thought I ought to submit a bug report.

Good luck! I love your program!

PenelopeFudd commented 10 years ago

I just realized that nytprofhtml did create an nytprof directory, and it has a bunch of files including index.html, but I don't know if anything is missing or damaged by this error, or if it's a completely harmless error message.

Sorry for any annoyance I may have caused!

timbunce commented 10 years ago

No problem. This is actually a known issue - there's an open ticket in rt.cpan.org that's not been copied over to github yet. A small test case (ideally one that doesn't involve Apache) would be helpful.

jkeenan commented 3 years ago

Hello!

I'm debugging a legacy perl program on OpenSolaris 10 with perl v5.8.8 built for i86pc-solaris-thread-multi, with Devel::NYTProf 5.06. It's running as an Fcgi program under apache 2.2.25.

nytprofhtml -f nytprof.out.15306 
Reading nytprof.out.15306
Processing nytprof.out.15306 data
Writing line reports to nytprof directory
 100% ... 
Extracting subroutine call data ...
Extracting subroutine links
Generating subroutine stack flame graph ...
Can't resolve fid of '0' at /bin/nytprofhtml line 1381

The apache configuration has this:

  FcgidCmdOptions /path/to/program.pl \
     InitialEnv PERL5OPT=-d:NYTProf \
     InitialEnv NYTPROF=file=/tmp/nytprof-main.out:addpid=1:start=no \
     MaxProcesses 1

The code has this:

STARTOFLOOP: while ((alarm 0 || 1) && &check_for_signal &&
  (DB::disable_profile() || 1) && 
(my $q = new CGI::Fast) ) {
  if (-e "/tmp/nytprof-please") {DB::enable_profile();}
  if (-e "/tmp/nytprof-exit") {unlink("/tmp/nytprof-exit","/tmp/nytprof-please");exit 0;}

  blah.blah.blah;
}

I copied the nytprof.out file to a linux machine and ran nytprofhtml there, and after complaining about all of the perl files that were not found, it too died with "Can't resolve fid of '0' at /usr/local/bin/nytprofhtml line 1381."

I'm sorry I can't provide more information or spend more time on this, but I thought I ought to submit a bug report.

Good luck! I love your program!

In the version of Devel-NYTProf you were using when you filed this ticket, the relevant lines appear to have been:

1380     my (@t_stmt_exec, @t_stmt_time);
1381     my @fis = $profile->noneval_fileinfos;
1382     @fis = sort { $b->meta->{'time'} <=> $a->meta->{'time'} } @fis;

I believe that those statements are now found here in bin/nytprofhtml:

1407     my (@t_stmt_exec, @t_stmt_time);
1408     my @fis = $profile->noneval_fileinfos;
1409     @fis = sort { $b->meta->{'time'} <=> $a->meta->{'time'} } @fis;

Does that seem correct?

BTW: A new version of Devel-NYTProf (6.07) was released to CPAN this morning (https://metacpan.org/pod/Devel::NYTProf).

Thank you very much. Jim Keenan