jokkedk / webgrind

Xdebug Profiling Web Frontend in PHP
Other
3.28k stars 411 forks source link

No output after loading a cachegrind file #156

Open SagnikGanguly96 opened 2 years ago

SagnikGanguly96 commented 2 years ago

When I've tried to load cachegrind file, no output is generated in Webgrind. Here's my versions: Webgrind: 1.9 XDebug: 3.1.3 PHP: 8.1.0 OS: Windows 10 (x64)

Anyway I found the error below when clicking on "Update" button, it sends a XHR request and the response is: Fatal error: Uncaught ValueError: fread(): Argument #2 ($length) must be greater than 0 in E:\httpd\htdocs\tools\webgrind\library\Reader.php:255 Stack trace: #0 E:\httpd\htdocs\tools\webgrind\library\Reader.php(255): fread() #1 E:\httpd\htdocs\tools\webgrind\library\Reader.php(91): Webgrind_Reader->read() #2 E:\httpd\htdocs\tools\webgrind\library\Reader.php(76): Webgrind_Reader->init() #3 E:\httpd\htdocs\tools\webgrind\library\FileHandler.php(166): Webgrind_Reader->__construct() #4 E:\httpd\htdocs\tools\webgrind\index.php(43): Webgrind_FileHandler->getTraceReader() #5 {main} thrown in E:\httpd\htdocs\tools\webgrind\library\Reader.php on line 255

ricardoboss commented 2 years ago

Same with the current docker image:

<br />
<b>Warning</b>:  fread(): Length parameter must be greater than 0 in <b>/var/www/html/library/Reader.php</b> on line <b>247</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /var/www/html/library/Reader.php:247) in <b>/var/www/html/index.php</b> on line <b>243</b><br />
...json stuf...
alpha0010 commented 2 years ago

Could you provide a cachegrind file that that triggers this error?

SagnikGanguly96 commented 2 years ago

Hi @ricardoboss, @alpha0010, I would like to inform you that I've solved the problem. I'm sorry I forgot to inform the same hereafter opening the issue.

SagnikGanguly96 commented 2 years ago

@ricardoboss, I've manually gone through all the related files of the 'Webgrind' library to find out the exact cause and I found the error I've already mentioned in my first comment then to solve the above problem I found that actually webgrind doesn't extract the compressed XDebug profiles to parse, instead, it parses only raw XDebug profiles. So the problem could be solved by just disabling compression (in my case) which could be done using xdebug.use_compression = false. And here's my 99-xdebug.ini configured for profiling:

zend_extension = xdebug
;xdebug.mode = develop
xdebug.mode = profile
xdebug.output_dir = "E:/php/common/tmp/XDebug/Profile"
xdebug.profiler_enable = 1
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
xdebug.use_compression  = false
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.show_local_vars = 1
alpha0010 commented 2 years ago

Thanks for the update.

Compression support already in master; I forgot to tag a release for it... will do so soon.

scottchiefbaker commented 2 years ago

I'm new to Webgrind and I just ran in to this issue as well. I thought I was going crazy, as you get no error it just doesn't work.

I can confirm this is fixed on master.

csandanov commented 1 year ago

Hi, would it be possible to release a tag with the compression support? Thank you!

danielbeardsley commented 1 year ago

I'm running master and am still getting this error. I'll happily provide a cachegrind file. Send a message to my public email address.

scottchiefbaker commented 1 year ago

@danielbeardsley don't put the burden on the developers to contact you. Just attach the file here.

danielbeardsley commented 1 year ago

Just attach the file here.

TIL you can attach arbitrary files to github comments :-) I prompted for the email cause @alpha0010 didn't have an email address on their account.

Here's one cachegrind.out.2941563.gz

From the following command:

XDEBUG_PROFILE=1 php -d "xdebug.use_compression=1" -d "xdebug.mode=profile" -d "xdebug.profile=1" -r "function test() {echo 'test';} test();"
 PHP Fatal error:  Uncaught ValueError: fread(): Argument #2 ($length) must be greater than 0 in /mnt/ebs/var/www/ifixit/pub/Misc/webgrind/library/Reader.php:255
 Stack trace:
 #0 /mnt/ebs/var/www/ifixit/pub/Misc/webgrind/library/Reader.php(255): fread(Resource id #594, 0)
 #1 /mnt/ebs/var/www/ifixit/pub/Misc/webgrind/library/Reader.php(91): Webgrind_Reader->read(0)
 #2 /mnt/ebs/var/www/ifixit/pub/Misc/webgrind/library/Reader.php(76): Webgrind_Reader->init()
 #3 /mnt/ebs/var/www/ifixit/pub/Misc/webgrind/library/FileHandler.php(165): Webgrind_Reader->__construct('/tmp/cachegrind...', 'usec')
 #4 /mnt/ebs/var/www/ifixit/pub/Misc/webgrind/index.php(43): Webgrind_FileHandler->getTraceReader('cachegrind.out....', 'usec')
 #5 {main}
   thrown in /mnt/ebs/var/www/ifixit/pub/Misc/webgrind/library/Reader.php on line 255

I get this on the most recent master.

SagnikGanguly96 commented 1 year ago

@danielbeardsley, Turn off the compression by changing the following xdebug.use_compression=1 to xdebug.use_compression=0. It should solve the issue.

danielbeardsley commented 1 year ago

Turn off the compression

Yes, I'm aware that the bug is in the support of compressed profiles and that not using compression doesn't expose the bug. The point of this issue is that compression support is not finished and seemingly still doesn't work on master.