😎 Tracy: the addictive tool to ease debugging PHP code for cool developers. Friendly design, logging, profiler, advanced features like debugging AJAX calls or CLI support. You will love it.

Last update: May 20, 2022

Tracy - PHP debugger

Downloads this Month Tests Build Status Windows Latest Stable Version License

Introduction

Tracy library is a useful helper for everyday PHP programmers. It helps you to:

  • quickly detect and correct errors
  • log errors
  • dump variables
  • measure execution time of scripts/queries
  • see memory consumption

PHP is a perfect language for making hardly detectable errors because it gives great flexibility to programmers. Tracy\Debugger is more valuable because of that. It is an ultimate tool among the diagnostic ones. If you are meeting Tracy for the first time, believe me, your life starts to be divided into one before the Tracy and the one with her. Welcome to the good part!

Documentation can be found on the website.

Support Tracy

Do you like Tracy? Are you looking forward to the new features?

Buy me a coffee

Thank you!

Installation and requirements

The recommended way to is via Composer:

composer require tracy/tracy

Alternatively, you can download the whole package or tracy.phar file.

Tracy compatible with PHP compatible with browsers
Tracy 2.8 PHP 7.2 – 8.0 Chrome 55+, Firefox 53+, Safari 11+ and iOS Safari 11+
Tracy 2.7 PHP 7.1 – 8.0 Chrome 55+, Firefox 53+, MS Edge 16+, Safari 11+ and iOS Safari 11+
Tracy 2.6 PHP 7.1 – 8.0 Chrome 49+, Firefox 45+, MS Edge 14+, Safari 10+ and iOS Safari 10.2+
Tracy 2.5 PHP 5.4 – 7.4 Chrome 49+, Firefox 45+, MS Edge 12+, Safari 10+ and iOS Safari 10.2+
Tracy 2.4 PHP 5.4 – 7.2 Chrome 29+, Firefox 28+, IE 11+ (except AJAX), MS Edge 12+, Safari 9+ and iOS Safari 9.2+

Usage

Activating Tracy is easy. Simply add these two lines of code, preferably just after library loading (like require 'vendor/autoload.php') and before any output is sent to browser:

use Tracy\Debugger;

Debugger::enable();

The first thing you will notice on the website is a Debugger Bar.

(If you do not see anything, it means that Tracy is running in production mode. For security reasons, Tracy is visible only on localhost. You may force Tracy to run in development mode by passing the Debugger::DEVELOPMENT as the first parameter of enable() method.)

The enable() involves changing the error reporting level to E_ALL.

Debugger Bar

The Debugger Bar is a floating panel. It is displayed in the bottom right corner of a page. You can move it using the mouse. It will remember its position after the page reloading.

Debugger-Bar

You can add other useful panels to the Debugger Bar. You can find interesting ones in addons or you can create your own.

If you do not want to show Debugger Bar, set:

Debugger::$showBar = false;

Visualization of errors and exceptions

Surely, you know how PHP reports errors: there is something like this in the page source code:

<b>Parse error</b>:  syntax error, unexpected '}' in <b>HomepagePresenter.php</b> on line <b>15</b>

or uncaught exception:

<b>Fatal error</b>:  Uncaught Nette\MemberAccessException: Call to undefined method Nette\Application\UI\Form::addTest()? in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php:100
Stack trace:
#0 /sandbox/vendor/nette/utils/src/Utils/Object.php(75): Nette\Utils\ObjectMixin::call(Object(Nette\Application\UI\Form), 'addTest', Array)
#1 /sandbox/app/forms/SignFormFactory.php(32): Nette\Object-&gt;__call('addTest', Array)
#2 /sandbox/app/presenters/SignPresenter.php(21): App\Forms\SignFormFactory-&gt;create()
#3 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(181): App\Presenters\SignPresenter-&gt;createComponentSignInForm('signInForm')
#4 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(139): Nette\ComponentModel\Container-&gt;createComponent('signInForm')
#5 /sandbox/temp/cache/latte/15206b353f351f6bfca2c36cc.php(17): Nette\ComponentModel\Co in <b>/sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php</b> on line <b>100</b><br />

It is not so easy to navigate through this output. If you enable Tracy, both errors and exceptions are displayed in a completely different form:

Uncaught exception rendered by Tracy

The error message literally screams. You can see a part of the source code with the highlighted line where the error occurred. A message clearly explains an error. The entire site is interactive, try it.

And you know what? Fatal errors are captured and displayed in the same way. No need to install any extension (click for live example):

Fatal error rendered by Tracy

Errors like a typo in a variable name or an attempt to open a nonexistent file generate reports of E_NOTICE or E_WARNING level. These can be easily overlooked and/or can be completely hidden in a web page graphic layout. Let Tracy manage them:

Notice rendered by Tracy

Or they may be displayed like errors:

Debugger::$strictMode = true; // display all errors
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // all errors except deprecated notices

Notice rendered by Tracy

In order to detect misspellings when assigning to an object, we use trait Nette\SmartObject.

Content Security Policy

If your site uses Content Security Policy, you'll need to add 'nonce-<value>' to script-src and eventually the same nonce to style-src for Tracy to work properly. Some 3rd plugins may require additional directives. Avoid adding 'unsafe-inline' & 'unsafe-eval' in production mode, if you can.

Configuration example for Nette Framework:

http:
	csp:
		script-src: nonce
		style-src: nonce

Faster loading

The basic integration is straightforward, however if you have slow blocking scripts in web page, they can slow the Tracy loading. The solution is to place <?php Tracy\Debugger::renderLoader() ?> into your template before any scripts:

<!DOCTYPE html>
<html>
<head>
	<title>...<title>
	<?php Tracy\Debugger::renderLoader() ?>
	<link rel="stylesheet" href="assets/style.css">
	<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>

AJAX and redirected requests

Tracy is able to show Debug bar and Bluescreens for AJAX and redirected requests. You just have to start session before Tracy:

session_start();
Debugger::enable();

In case you use non-standard session handler, you can start Tracy immediately (in order to handle any errors), then initialize your session handler and then inform Tracy that session is ready to use via dispatch():

Debugger::enable();

// initialize session handler
session_start();

Debugger::dispatch();

Opening files in the editor

When the error page is displayed, you can click on file names and they will open in your editor with the cursor on the corresponding line. Files can also be created (action create file) or bug fixed in them (action fix it). In order to do this, you need to configure the browser and the system.

Production mode and error logging

As you can see, Tracy is quite eloquent. It is appreciated in a development environment, but on a production server, it would cause a disaster. Any debugging information cannot be listed there. Therefore Tracy has an environment autodetection and logging functionality. Instead of showing herself, Tracy stores information into a log file and shows the visitor a user-comprehensible server error message:

Server Error 500

Production output mode suppresses all debugging information which is sent out via dump() or Debugger::fireLog(), and of course all error messages generated by PHP. So, even if you forget dump($obj) in the source code, you do not have to worry about it on your production server. Nothing will be seen.

The output mode is set by the first parameter of Debugger::enable(). You can specify either a constant Debugger::PRODUCTION or Debugger::DEVELOPMENT. Other option is to set it up in a way, that development mode will be on when the application is accessed from a defined IP address with a defined value of tracy-debug cookie. The syntax used to achieve this is [email protected].

If it is not specified, the default value Debugger::DETECT is used. In this case, the system detects a server by IP address. The production mode is chosen if an application is accessed via a public IP address. A local IP address leads to development mode. It is not necessary to set the mode in most cases. The mode is correctly recognized when you are launching the application on your local server or in production.

In the production mode, Tracy automatically captures all errors and exceptions into a text log. Unless you specify otherwise, it will be stored in log/error.log. This error logging is extremely useful. Imagine, that all users of your application are actually betatesters. They are doing cutting-edge work for free when hunting bugs and you would be silly if you threw away their valuable reports to a recycle bin unnoticed.

If you need to log your own messages or caught exceptions, use the method log():

Debugger::log('Unexpected error'); // text message

try {
	criticalOperation();
} catch (Exception $e) {
	Debugger::log($e); // log exception
	// or
	Debugger::log($e, Debugger::ERROR); // also sends an email notification
}

A directory for errors logging can be set by the second parameter of the enable() method:

Debugger::enable(Debugger::DETECT, __DIR__ . '/mylog');

If you want Tracy to log PHP errors like E_NOTICE or E_WARNING with detailed information (HTML report), set Debugger::$logSeverity:

Debugger::$logSeverity = E_NOTICE | E_WARNING;

For a real professional the error log is a crucial source of information and he or she wants to be notified about any new error immediately. Tracy helps him. She is capable of sending an email for every new error record. The variable $email identifies where to send these e-mails:

Debugger::$email = '[email protected]';

If you use the Nette Framework, you can set this and others in the configuration file.

To protect your e-mail box from flood, Tracy sends only one message and creates a file email-sent. When a developer receives the e-mail notification, he checks the log, corrects his application and deletes the email-sent monitoring file. This activates the e-mail sending again.

Variable dumping

Every debugging developer is a good friend with the function var_dump, which lists all contents of any variable in detail. Unfortunately, its output is without HTML formatting and outputs the dump into a single line of HTML code, not to mention context escaping. It is necessary to replace the var_dump with a more handy function. That is just what dump() is.

$arr = [10, 20.2, true, null, 'hello'];

dump($arr);
// or Tracy\Debugger::dump($arr);

generates the output:

dump

You can also change the nesting depth by Debugger::$maxDepth and displayed strings length by Debugger::$maxLength. Naturally, lower values accelerate Tracy rendering.

Debugger::$maxDepth = 2; // default: 7
Debugger::$maxLength = 50; // default: 150
Debugger::$dumpTheme = 'dark'; // default: light

The dump() function can display useful location information:

Debugger::$showLocation = true; // shows tooltip with path to the file, where the dump() was called, and tooltips for every dumped objects
Debugger::$showLocation = Tracy\Dumper::LOCATION_CLASS; // shows only tooltips for every dumped object containing path to the file
Debugger::$showLocation = false; // hides all location information

Very handy alternative to dump() is dumpe() (ie. dump and exit) and bdump(). This allows us to dump variables in Debugger Bar. This is useful, because dumps don't mess up the output and we can also add a title to the dump.

bdump([2, 4, 6, 8], 'even numbers up to ten');
bdump([1, 3, 5, 7, 9], 'odd numbers up to ten');

bar dump

Timing

Another useful tool is the debugger stopwatch with a precision of microseconds:

Debugger::timer();

// sweet dreams my cherrie
sleep(2);

$elapsed = Debugger::timer();
// $elapsed = 2

Multiple measurements at once can be achieved by an optional parameter.

Debugger::timer('page-generating');
// some code

Debugger::timer('rss-generating');
// some code

$rssElapsed = Debugger::timer('rss-generating');
$pageElapsed = Debugger::timer('page-generating');
Debugger::timer(); // runs the timer

... // some time-consuming operation

echo Debugger::timer(); // elapsed time in seconds

FireLogger

You cannot always send debugging information to the browser window. This applies to AJAX requests or generating XML files to output. In such cases, you can send the messages by a separate channel into FireLogger. Error, Notice and Warning levels are sent to FireLogger window automatically. It is also possible to log suppressed exceptions in running application when attention to them is important.

How to do it?

  • install extension FireLogger for Chrome
  • turn on Chrome DevTools (using Ctrl-Shift-I key) and open Console

Navigate to the demo page and you will see messages sent from PHP.

Because Tracy\Debugger communicates with FireLogger via HTTP headers, you must call the logging function before the PHP script sends anything to output. It is also possible to enable output buffering and delay the output.

use Tracy\Debugger;

Debugger::fireLog('Hello World'); // send string into FireLogger console

Debugger::fireLog($_SERVER); // or even arrays and objects

Debugger::fireLog(new Exception('Test Exception')); // or exceptions

The result looks like this:

FireLogger

Custom Logger

We can create a custom logger to log errors, uncatched exceptions, and also be called by Tracy\Debugger::log(). Logger implements the interface Tracy\ILogger.

use Tracy\ILogger;

class SlackLogger implements ILogger
{
	public function log($value, $priority = ILogger::INFO)
	{
		// sends a request to Slack
	}
}

And then we activate it:

Tracy\Debugger::setLogger(new SlackLogger);

If we use the full Nette Framework, we can set it in the NEON configuration file:

services:
	tracy.logger: SlackLogger

nginx

If Tracy does not work on nginx, it is probably misconfigured. If there is something like

try_files $uri $uri/ /index.php;

change it to

try_files $uri $uri/ /index.php$is_args$args;

Integrations

This is a list of unofficial integrations to other frameworks and CMS:

... feel free to be famous, create an integration for your favourite platform!

GitHub

https://github.com/nette/tracy
Comments
  • 1. New Bar icons

    Are you open to change the bar icons? I would suggest to use Fontawesome font to generate bigger icons to look good on retina.

    My suggestions:

    Execution time: http://fontawesome.io/icon/clock-o/ Memory: http://fontawesome.io/icon/bar-chart/ Routes: http://fontawesome.io/icon/road/ Database: http://fontawesome.io/icon/database/ Identity: http://fontawesome.io/icon/user/

    I suppose, 32x32px should be enough for retina displays.

    License allows use icons without attribution, but i would suggest to mention it somewhere.

    Reviewed by zraly at 2015-02-07 00:54
  • 2. Debugger not shown on some servers with recent session changes

    Since https://github.com/nette/tracy/commit/5c46e989a61fd2594db6eda0f0da4f904ccad4c7 (all the session changes) I no longer see the debugger bar on one of my servers. I haven't tested widely yet to narrow it down, but here are a few key differences between one that works and one that doesn't.

    Works: PHP 5.6.6 Server API: Apache 2.0 Handler session.save_handler: files

    Doesn't Work: PHP 5.5.35 Server API: CGI/FastCGI session.save_handler: user

    Let me know if I can provide ant further info.

    Reviewed by adrianbj at 2016-05-20 18:05
  • 3. Feature: Dump to file

    In both the development and the production there is a lot of situations where "super-smart" solutions like Firelog cannot be used. Sometimes it is impossible even to get the script output to the browser, eg. non-HTTP applications like cron jobs etc.

    It would be nice to have the ability to dump variables to a file in the %tempDir%.

    API would be as follows:

    class Debugger { function fileDump($variable, $name = NULL); }
    

    This will produce Tracy's nice clickable dump saved in the %tempDir% in a HTML file optionaly with a custom name. I assume that some smart variable hash, PID and/or time prefixes could come into play.

    @dg does this a chance to be merged? Should I prepare a pull?

    Reviewed by rostenkowski at 2013-07-07 12:27
  • 4. Speed / order of loading debug bar much slower than with 2.3

    This is part bug report and part feature request

    Description

    I have noticed for a while that the loading of the debug bar is quite slow. Looking through a few of my sites, it takes 2-3 seconds after the DOM has loaded before it is displayed. It also prevents any document.ready JS on the site from being applied until after the debug bar is loaded.

    The problem seems to only occur when I am loading some of my custom panels, but if I switch to the 2.3 branch of Tracy (with no other changes) the bar loads virtually immediately as the DOM finished loading. I thought it might be related to the lazy loading of panels not working anymore, but that wasn't introduced until 2.4.

    So is it possible to speed it up back to at least close 2.3 speeds, and also is it possible to load it after other JS on the page so at least if there is a delay in loading, it doesn't affect page rendering.

    Please let me know if you can't observe it at your end and I'll give you access to a site showing the problem.

    Steps To Reproduce

    Switch between 2.3 and 2.4

    Reviewed by adrianbj at 2017-02-17 22:40
  • 5. Ajax bar not working since #9dd9ebf90df

    https://github.com/nette/tracy/commit/9dd9ebf90dff48366a0c958c5311dc42e80eef68 breaks it for me. Any thoughts on why it would have stopped working? As soon as I revert to the previous commit it works as expected.

    Thanks.

    Reviewed by adrianbj at 2016-10-01 17:21
  • 6. How to customise Error Page ?

    Hi, I seems tracy has all cool features as I am looking for, but i would like to know how can I customise error template page, I am trying to integrate with my latest project Cygnite Framework , I would like to display few information about Cygnite Framework in the Error page.

    Is it possible i can overwrite the error page, change design, color schema, project name and version etc.

    Any response would be highly appreciated.

    Thanks, Sanjoy

    Reviewed by sanjoydesk at 2014-03-31 19:59
  • 7. Change editor mapping to support multiple changes to the same substring

    Sorry, I didn’t think about the scenario of wanting make multiple changes to a substring. Of course strtr fails at this. This version allows these sorts of changes. In my scenario I can now change from the compiled version to the source version, as well as map production server URLs to the local dev source.

    Hopefully you are happy with these changes.

    Reviewed by adrianbj at 2016-05-18 15:58
  • 8. Move Tracy under namespace Nette\Tracy

    I don't think Tracy should be ashamed of to be part of Nette Framework (or being developed by Nette Foundation). If you will create more repositories with parts of Nette (e.q. Nette\Image) in future, it will be impossible to find cool names for all of them.

    In fact, I don't think it is necessary to rename Nette\Diagnostics at all :)

    Reviewed by janmarek at 2013-03-15 14:03
  • 9. Large size of live dumps in 2.6

    Version: 2.6

    Bug Description

    Not sure if this is somehow specific to my implementation, but I've noticed that the size of a live dump in 2.6 is higher than 2.5. Here are some numbers to show what I mean. The tables below show the same dump once vs 100 times.

    ONCE

    | | Live ON | Live OFF | |----:|---------|----------| | 2.5 | 3.8 K | 204 K | | 2.6 | 44 K | 204 K |

    100 TIMES

    | | Live ON | Live OFF | |----:|---------|----------| | 2.5 | 276 K | Out of memory | | 2.6 | 4.6 M | Out of memory |

    So as you can see, the size of the live dump in 2.6 is significantly greater than it is in 2.5.

    Let me know if I can provide any additional info.

    Thanks.

    Reviewed by adrianbj at 2019-02-20 23:54
  • 10. bar.js won't load if current URL 404s due to apache restrictions

    Version: 2.7.3

    Bug Description

    If you visit a URL that is blocked by apache (ie before it hits PHP), eg: http://pwtest.test/hjk'k

    when there is an Apache rule like:

     RewriteCond %{REQUEST_URI} "^/~?[-_.a-zA-Z0-9/]*$"
    

    preventing access to a URL with a '.

    you get the following error: GET http://pwtest.test/bla'h/?_tracy_bar=js&v=2.7.3&XDEBUG_SESSION_STOP=1 net::ERR_ABORTED 404 (Page Not Found)

    Possible Solution

    I am not sure the relevance of using <?= Helpers::escapeHtml($baseUrl) ?> here: https://github.com/nette/tracy/blob/f1d0d25de5e58749e20dacfa7973258afa230cf6/src/Tracy/Bar/assets/loader.phtml#L22

    Is there a reason the full URL to the page is needed here? If the path is changed to the root of the site, eg: http://pwtest.test/?_tracy_bar=js&v=2.7.3&XDEBUG_SESSION_STOP=1 then it loads as expected, but perhaps there is a need for the full url to the current page that I am not aware of.

    Thanks.

    Reviewed by adrianbj at 2020-03-17 23:18
  • 11. Dumper: use __debugInfo if present by default to export object

    This is resurrection of https://github.com/nette/nette/pull/1415.

    Tests are added.

    I've also added possibility to switch this off with Dumper::DEBUGINFO => FALSE. I've chosen TRUE as default because it feels to me not only as new feature, but rather matching default behavior of PHP. Last point: I've enabled it only for PHP >=5.6 where this magic method is actually supported by PHP.

    Reviewed by vojtech-dobes at 2016-02-11 15:01
  • 12. Huge amount of tracy sessions files "tracy-*"

    DISCLAIMER : I'm aware of this ticket about setting up a custom sessionfile but my suggestion is quite different.

    I think it's more a feature than a bug, but I didn't fully understand how Tracy worked before running into this problem. And it's very problematic for the deployments of my app .... Since Tracy needs, implicitly very specific privileges.

    Brace yourself, we'll talk about sessions here.

    Here's the idea :

    1 - the acces rights of the session folder

    In the folder /var/lib/php/sessions where tracy stores its sessions files Here find an ls -la of its content, for you to get my problem.

    [email protected]:/var/www/html# ls -la /var/lib/php/sessions
    total 28
    drwx-wx-wt 1 root     root     4096 Mar 24 13:01 .
    drwxr-xr-x 1 root     root     4096 Jun  2  2021 ..
    -rw------- 1 www-data www-data   83 Mar 24 11:07 sess_l9q9be5pija67e0criirm548ut
    -rw-r--r-- 1 www-data www-data    6 Mar 24 11:10 tracy-aef1133a02
    -rw-r--r-- 1 www-data www-data   41 Mar 24 11:07 tracy-afea481a37
    -rw-r--r-- 1 www-data www-data   23 Mar 24 13:01 tracy-c2f9802a62
    -rw-r--r-- 1 www-data www-data   23 Mar 24 13:01 tracy-ddce050766
    

    My app is connected as www-data.

    2 - the FileSession.php class

    I understood that this class handle the session file. Moreover the clean() function allows Tracy to delete its sessions files. OK

    3 - The problem with my environment

    On the example above I listed only 4 "tracy-" sessions files but after few hours (since I check the 'heartbeat' of my test servers by calling the index) I can end up with thousands of useless tracy files.

    The incriminated line is here officer : https://github.com/nette/tracy/blob/e4dd63c60b69cfaa68aac874abf8f456837858ed/src/Tracy/Session/FileSession.php#L84

    The problem with the function glob is that you need to have access rights on the folder sessions as it needs to list all files in the folder. But you can see up there with my ls -la that my folder has very limited rights. (i.e. I can't list the files in the folder but I can delete them if I know the precise filenames.)

    4 - Possible improvement

    Usually a normal development environment never connects as root, so it may be problematic for devs like me.
    I don't have the rights to list all files but I can delete/modify files as long as I know their names.

    Here's the idea : add an attribute to FileSession typed string[] to list all the session files created to unlink all the name listed in this variable, instead of using glob.

    This feature would be consistent with the way session_destroy() works.
    Php lists all the created file like a zval then deletes them by listing all the registered names instead of listing all the session file names from the folder.

    Reviewed by DanielC-N at 2022-03-24 14:10
  • 13. psr3 adapter for monolog/monolog example

    I tested with the following code:

    index.php

    <?PHP
    use Tracy\ILogger;
    use Tracy\Debugger;
    use Tracy\Bridges\Psr\PsrToTracyLoggerAdapter;
    use Monolog\Logger;
    use Monolog\Handler\StreamHandler;
    
    require_once "vendor/autoload.php";
    
    $monolog = new Logger('main-channel');
    $monolog->pushHandler(new StreamHandler("/private/tmp/ok/lol.log", Logger::DEBUG));
    
    $tracyLogger = new PsrToTracyLoggerAdapter($monolog);
    Debugger::setLogger($tracyLogger);
    Debugger::enable();
    
    Debugger::log("info");
    Debugger::log('warning', ILogger::WARNING);
    

    composer.json

    {
        "name": "paxperscientiam/ok",
        "require-dev": {
            "tracy/tracy": "^2.9",
            "monolog/monolog": "^2.3"
        },
        "autoload": {
            "psr-4": {
                "Paxperscientiam\\Ok\\": "src/"
            }
        },
        "authors": [
            {
                "name": "Chris",
                "email": "[email protected]"
            }
        ],
        "require": {}
    }
    
    • bug fix / new feature?
    • BC break? yes/no
    • doc PR: nette/docs#???
    Reviewed by paxperscientiam at 2022-03-20 21:54
  • 14. White Screen after upgrade

    Version: 2.9.1

    Bug Description

    Would get a White Screen of Death with 2.9.1. Could not find any errors in my log or on the screen.

    Steps To Reproduce

    Commented out lines until I get 2.9.1 to work to some degree by removing the dispatch function from Debugger.php

    I saw this in the release notes Debugger: enable() calls dispatch() always I think it is my problem.

    Possible Solution

    I changed my composer.json to hold at 2.9 and everything is fine.

    Reviewed by masonjo at 2022-02-19 17:07
  • 15. CSS styles in Tracy

    Version: 2.9.1

    Bug Description

    Hi, after upgrade from 2.8.9 to 2.9.1, Tracy´s CSS is getting overriden by CSS from my web app. Not sure, what actually happened, but with 2.8.9, everything was OK, now, I´m getting white texts (and other stuff like active elements) in every panel but System info. It´s taking white text color from my dark admin theme.

    Steps To Reproduce

    I can make screenshots, but these overrides Tracy´s text color in Router or variable names in dump panel:

    .mod-skin-dark:not(.mod-skin-light) code { background: rgba(0, 0, 0, 0.3); color: #ffffff; } .mod-skin-dark:not(.mod-skin-light) pre { color: #ffffff; }

    ...

    Css is normally linked in header(). It´s from large admin design template, it has color switcher for light/dark version.

    Expected Behavior

    Previous behaviour I guess. It should not be possible to override Tracy´s css from web´s css.

    Reviewed by darkWolf-PR at 2022-02-18 19:09
  • 16. Tracy panel lazy loading

    Hello,

    As a package developer, I like to provide debug information to developers via the Tracy panel. However, getting some data takes a long time and is not necessary to do in every request (for example, mapping all entities in Doctrine).

    I'd like to introduce the concept of lazy loading of panels in Tracy, which will compile their content after the panel is clicked.

    I've been thinking about the concept of builds, and lazy loading should only work for panels that work in isolation from the current request and can always be retrieved for their content. For example, the panel would be called as a DIC service and so on (I would be very happy for more ideas on how this could work).

    Also, panels should natively be able to be set to not be rendered during ajax. This then delays the loading of the whole page, even though I don't need the panel most of the time.

    Thank you.

    Reviewed by janbarasek at 2022-01-15 10:33
Slim Framework Tracy Debugger Bar
 Slim Framework Tracy Debugger Bar

Slim Framework Tracy Debugger Bar configure it by mouse now in package: Panel Description Slim Framework - Slim Environment RAW data Slim Container RA

Feb 26, 2022
PHP errors for cool kids
PHP errors for cool kids

whoops PHP errors for cool kids whoops is an error handler framework for PHP. Out-of-the-box, it provides a pretty error interface that helps you debu

May 18, 2022
Low-overhead sampling profiler for PHP 7+
Low-overhead sampling profiler for PHP 7+

phpspy phpspy is a low-overhead sampling profiler for PHP. For now, it works with Linux 3.2+ x86_64 non-ZTS PHP 7.0+ with CLI, Apache, and FPM SAPIs.

May 14, 2022
Silex Web Profiler

The Silex Web Profiler service provider allows you to use the wonderful Symfony web debug toolbar and the Symfony profiler in your Silex 2.x application.

Nov 12, 2021
Kint - a powerful and modern PHP debugging tool.
Kint - a powerful and modern PHP debugging tool.

Kint - debugging helper for PHP developers What am I looking at? At first glance Kint is just a pretty replacement for var_dump(), print_r() and debug

May 14, 2022
The ultimate debugging and development tool for ProcessWire
The ultimate debugging and development tool for ProcessWire

Tracy Debugger for ProcessWire The ultimate “swiss army knife” debugging and development tool for the ProcessWire CMF/CMS Integrates and extends Nette

Apr 14, 2022
Xdebug — Step Debugger and Debugging Aid for PHP

Xdebug Xdebug is a debugging tool for PHP. It provides step-debugging and a whole range of development aids, such as stack traces, a code profiler, fe

May 13, 2022
Sage - Insightful PHP debugging assistant ☯
 Sage - Insightful PHP debugging assistant ☯

Sage - Insightful PHP debugging assistant ☯ At first glance Sage is just a pretty replacement for var_dump() and debug_backtrace(). However, it's much

May 4, 2022
Buggregator is a beautiful, lightweight web server built on Laravel and VueJs that helps debugging your app.
Buggregator is a beautiful, lightweight web server built on Laravel and VueJs that helps debugging your app.

A server for debugging more than just Laravel applications. Buggregator is a beautiful, lightweight web server built on Laravel and VueJs that helps d

May 16, 2022
A collection of helper methods for testing and debugging API endpoints.

Laravel API Test Helpers This is a collection of helper methods for testing and debugging API endpoints. Installation You can install the package via

Apr 16, 2022
WordPress debugging made simple.
WordPress debugging made simple.

Loginator Debugging WordPress can sometimes be a pain, our goal is to make it easy, which is why Loginator was built with this in mind. From creating

Feb 12, 2022
Restart a CLI process without loading the xdebug extension.

composer/xdebug-handler Restart a CLI process without loading the Xdebug extension, unless xdebug.mode=off. Originally written as part of composer/com

May 18, 2022
A tool to profile mysql queries in php env.
A tool to profile mysql queries in php env.

MysqlQueryProfiler This tool helps you to quickly profile a mysql query in a PHP 7.4+ environnement. You can also compare 2 queries. This image shows

Jul 30, 2021
Handle PHP errors, dump variables, execute PHP code remotely in Google Chrome

PHP Console server library PHP Console allows you to handle PHP errors & exceptions, dump variables, execute PHP code remotely and many other things u

May 19, 2022
Php Debugger to run in terminal to debug your code easily.
Php Debugger to run in terminal to debug your code easily.

What is Dephpugger? Dephpugger (read depugger) is an open source lib to make a debug in php direct in terminal, without necessary configure an IDE. Th

Jan 12, 2022
Php Debugger to run in terminal to debug your code easily.
Php Debugger to run in terminal to debug your code easily.

What is Dephpugger? Dephpugger (read depugger) is an open source library that allows a developer to debug in php direct in terminal, without necessary

May 20, 2022
The VarDumper component provides mechanisms for walking through any arbitrary PHP variable. It provides a better dump() function that you can use instead of var_dump().

VarDumper Component The VarDumper component provides mechanisms for walking through any arbitrary PHP variable. It provides a better dump() function t

May 18, 2022
Ray server is a beautiful, lightweight php app build on Laravel that helps you debug your app. It runs without installation on multiple platforms.
Ray server is a beautiful, lightweight php app build on Laravel that helps you debug your app. It runs without installation on multiple platforms.

RayServer is a beautiful, lightweight web server built on Laravel and VueJs that helps debugging your app. It runs without installation on multiple platforms.

May 16, 2022
PHP APM (Alternative PHP Monitor)

APM (Alternative PHP Monitor) APM (Alternative PHP Monitor) is a monitoring extension enabling native Application Performance Management (APM) for PHP

May 19, 2022