Jump to content
adrian

Tracy Debugger

Recommended Posts

"PW's debug mode doesn't really change error reporting anymore". Can you please explain it a bit more? I do not quite get this.
 
About "superuser only mode": the module should also support non-superuser debugging too. What happens when we want to debug while logged in as another user+role? Why should we miss Tracy in this case? :) The more control we have in this area is the better, I suppose.

Debug mode in PW does two main things - it allows PHP errors/warnings to be displayed, and it shows the Debug Mode Tools in the admin. With Tracy enabled, you get the errors/warnings, whether Debug Mode is on or off, so I am finding that I no longer need it on, and it also means that I can debug a live site easily without anyone seeing the errors and $variable testing output.

I agree - we need to be able to use Tracy for non-superusers - just trying to figure out the most logical way. I feel like maybe it should simply be based on the PW Debug Mode setting and a dedicated "tracy-debugger" role. So if debug mode is off, then Tracy is only for superusers, but if debug mode is on, then non-superusers with the tracy-debugger role will have full access. This way you can create a test user with the required role and simply add the tracy-debugger role to their details and things will work. Does anyone have any thoughts on this? 

I should have checked "my" css before asking this question, sorry for this. I use a "framework" called Responsee 3 which happens to change the display property of <img> to "block". Changing it back to "inline" or "inline-block" fixes is the issue.

I do not know if you want deal with this issue or not, but you might be able to address this by targeting Tracy's <img> tags to set "inline" or "inline-block" !important on them, just in case... As far as I can see, Tracy itself uses a lot of !important rules as well. Maybe the developers of Tracy should apply this, and it is out of the scope of your module.

EDIT: "inline" or "inline-block"

I have replaced all icons with inline SVG - that should deal with your issue - please let me know if it looks ok now.

  • Like 1

Share this post


Link to post
Share on other sites

Debug mode in PW does two main things - it allows PHP errors/warnings to be displayed, and it shows the Debug Mode Tools in the admin. With Tracy enabled, you get the errors/warnings, whether Debug Mode is on or off, so I am finding that I no longer need it on, and it also means that I can debug a live site easily without anyone seeing the errors and $variable testing output.

Thank you for explaining it!

I agree - we need to be able to use Tracy for non-superusers - just trying to figure out the most logical way. I feel like maybe it should simply be based on the PW Debug Mode setting and a dedicated "tracy-debugger" role. So if debug mode is off, then Tracy is only for superusers, but if debug mode is on, then non-superusers with the tracy-debugger role will have full access. This way you can create a test user with the required role and simply add the tracy-debugger role to their details and things will work. Does anyone have any thoughts on this? 

Tying it to to ProcessWire's debug mode in this way does not seem to be the best idea if they can actually be independent. Why don't you just introduce another option in the settings to indicate that non-superusers with the tracy-debugger role have full access too? BTW, I like the idea of "tracy-debugger role". The only useful case of utilizing the state of the debug mode seems to be when with Tracy enabled, we get errors/warnings in the case of any non-superusers too, so that it works in a similar way as the debug mode does, which might be expected in the first place. By turning debug mode off, only superuser and/or "tracy-debugger role" users have access to Tracy.

I have replaced all icons with inline SVG - that should deal with your issue - please let me know if it looks ok now.

Thanx again, it has solved the issue!

  • Like 1

Share this post


Link to post
Share on other sites

Ok, I have now added the ability to enable Tracy for non-superusers. Users with a role that has the "tracy-debugger" permission will have access. I would recommend created a dedicated "tracy-debugger" role with just the "tracy-debugger" permission. That way you can easily give a user the required permission without giving any other users access. 

There is also a new "Allowed Non-Superusers" panel that warns you that you have given some non-superusers permission to view Tracy and lists the users and roles affected.

post-985-0-72536100-1455837898_thumb.png

post-985-0-72411800-1455837899_thumb.png

For the moment I have decided not to allow everyone access when the PW debug mode is on. I see the logic in this, but Tracy provides a lot more information than what the debug mode does, so I am hesitant to enable anyone to see that information without specifically being given the appropriate permission.

Please let me know what you guys think of the current version. If there are no issues, I will release this to the modules directory tomorrow.

Thanks again for all the testing and feedback!

  • Like 1

Share this post


Link to post
Share on other sites

Sorry haven't had time to test yet; please clarify...apart from the 1 issue you mentioned a couple of posts up, this should work just fine in PW 2.7.x? Thanks.

  • Like 1

Share this post


Link to post
Share on other sites

Sorry haven't had time to test yet; please clarify...apart from the 1 issue you mentioned a couple of posts up, this should work just fine in PW 2.7.x? Thanks.

Thanks for the prompting. The latest version should now work with the 2.7.x branch, but please let me know if you find any problems.

  • Like 3

Share this post


Link to post
Share on other sites

Latest version has two new features:

Performance panel

Shows memory usage and execution time between breakpoints.

You add breakpoints using one of these:

TD:addBreakpoint('Breakpoint Name');
addBreakpoint('Breakpoint Name');
bp('Breakpoint Name');

post-985-0-39542400-1455906548_thumb.png

PW Logs viewer panel

This shows the last 4 entries for the PW errors, exceptions, messages, warnings logs. This is just meant to give you a quick look at the last few entries without needing to go to the PW admin to the Setup>Logs section

post-985-0-23089400-1455906832_thumb.png

  • Like 5

Share this post


Link to post
Share on other sites

Ok, it's now live in the modules directory: http://modules.processwire.com/modules/tracy-debugger/

Thanks everyone for the feedback thus far, but please keep it coming - I am sure you will have suggestions on how it can be improved!

I would also like to add additional 3rd party panels as requested, so take a look here (https://addons.nette.org/#toc-debug-bar-panels) for some possible things you may be interested in. Keep in mind, that link isn't properly scrolling down, so click on the "DebugBar panels" under Categories on the right.

  • Like 2

Share this post


Link to post
Share on other sites

Thank you adrian!
First I deleted a previous version of the module manually, afterwards installed it via the modules directory. Now I get this (both public frontend and admin):

1× PHP Notice: A session had already been started - ignoring session_start() in .../site/modules/TracyDebugger/tracy/src/Tracy/Bar.php:59

Is it because I did not know how to upgrade properly or something else?
 

Share this post


Link to post
Share on other sites

Thank you adrian!

First I deleted a previous version of the module manually, afterwards installed it via the modules directory. Now I get this (both public frontend and admin):

1× PHP Notice: A session had already been started - ignoring session_start() in .../site/modules/TracyDebugger/tracy/src/Tracy/Bar.php:59

Is it because I did not know how to upgrade properly or something else?

@szabesz - sorry about that. I am guessing that you have the Force Scream mode checked? There is what I consider a bug in Tracy: https://forum.nette.org/en/25569-strict-and-scream-modes-together - I don't think that Force Scream should show warnings/notices from the Tracy core.

Initially I modified the Tracy core to handle this better, but it turned out not to work in some server configs, so I went back to using the @ to suppress the session_start error. 

Anyway, I think if you save the config settings page for this module again it should get things working - I now prevent Strict and Force Scream modes from being abled at the same time. Please let me know if that works for you. 

  • Like 1

Share this post


Link to post
Share on other sites

Anyway, I think if you save the config settings page for this module again it should get things working - I now prevent Strict and Force Scream modes from being abled at the same time. Please let me know if that works for you. 

"...it should get things working" What do you exactly mean by this? I saved the settings a few times, once with Strict Mode only enabled, then with Force Stream only on, but no matter what I do, this notice comes up when Force Stream is on (and Strict Mode is off). Should it be possible to use Force Stream without getting this notice or not?

My personal preference would be to be informed of notices and warnings (of ProcessWire and my code, not Tracy's). I do not need Strict Mode if that is not necessary to be able to see notices and warnings.

Sorry if it is a dumb question, but I do not quit get what the situation is. You wrote "...an issue with strict and scream modes together...", however, currently only Force Stream is on and the notice shows up as an error in the debug bar:

post-4029-0-92380100-1455983075_thumb.pn

Share this post


Link to post
Share on other sites

Thanks for that screenshot - that helps! What you are seeing there is because you have Force Scream mode enabled. I assumed you are getting the notice on the entire page blocking the site (like you get in Strict Mode). 

In reality I don't think you should have Force Scream enabled by default - its only purpose is to show notices/warnings that are suppressed by PHP's @ shutup operator. This can be useful when debugging your code in certain circumstances, but if you are using @ then you are intentionally silencing these errors. I don't think they are typically a good practice, but there can be times when they can be considered acceptable.

Anyway, you can disable both Strict and Force Scream modes and you will still get notification of notices and warnings in Tracy. Try these in one of your template files to test:

trigger_error("Warning TEST", E_USER_WARNING);
trigger_error("Notice TEST", E_USER_NOTICE);

With Strict mode ENABLED they will be a full screen error, that you can skip using the "skip error" when you hover over the "Warning Test":

post-985-0-70444600-1455984352_thumb.png

But with Strict mode DISABLED, it will be in the Debugger bar:

post-985-0-31387100-1455984419_thumb.png

Does that make sense and allow you to work how you want?

PS Since I have that screenshot showing the "Skip Error" option, also note the "Search" option which links to a Google search of the issued error - a nice little shortcut :)

  • Like 1

Share this post


Link to post
Share on other sites

Thanks for the explanation, now I get it :) Yes, you are right, I suppose normally I (we) will not need Force Scream at all. I just misunderstood what it is for. I am also quite happy with Strict Mode turned off too.

  • Like 1

Share this post


Link to post
Share on other sites

The latest version adds a new experimental "Variables" panel (thanks to a request by @matjazp).

This will show you the names and values of all non-ProcessWire variables available to the template of the current page - these are the variables you have defined in your template files and any "includes".

It is disabled by default so you need to turn it on in the config settings. It is only available for PW 3.x and currently only works on compiled templates (although I am looking to get it working on PW 2 / non-compiled templates). It also only works after a template file has changed for the first time after this module is installed/updated.

Please let me know if you have any problems with this feature - if you decide to enable it.

post-985-0-17339200-1456082840_thumb.png

This latest version also includes an enhanced PW panel - several additions/tweaks, but the most notable is the "Field Values" section which lists all Page fields and their values for the current page:

post-985-0-24655200-1456083617_thumb.png

  • Like 2

Share this post


Link to post
Share on other sites

firefox since, I forgot which version, is now built-in firefox developer tools, which do the same job as firebug extension.

Could it log to firefox developer tools?

Share this post


Link to post
Share on other sites

firefox since, I forgot which version, is now built-in firefox developer tools, which do the same job as firebug extension.

Could it log to firefox developer tools?

I don't think there is any way to make this happen at the moment. At least I haven't been able to find a FireLogger browser plugin for Firefox that works with the default developer console. But maybe someone will develop one in the future. Given that there is one for the Chrome dev console, you'd think there would be one for Firefox.

Share this post


Link to post
Share on other sites

Thanks @adrian for the ProcessModuleToolkit link, I'll check that later but at first glance it's not entirely the thing I was after.

I see there are 6 'Show ...' panels next to each other in Tracy Debugger module settings, perhaps they could be shrinked under one section. I know it's a minor thing but could save a lot of space.

Share this post


Link to post
Share on other sites
I see there are 6 'Show ...' panels next to each other in Tracy Debugger module settings, perhaps they could be shrinked under one section. I know it's a minor thing but could save a lot of space.

Very good point - are you meaning one field of multiple checkboxes, or a collapsible fieldset of with all the options as they currently are?

I think the former would probably be quite nice, but it might be a pain for you guys when updating to a new version that has this because your current settings would be lost. I guess I could have some logic to convert the old separate checkboxes to the new multiple checkbox field, or maybe it doesn't really matter that much if you have to set them again?

I'll have a think.

Share this post


Link to post
Share on other sites

After upgrading to the latest version I get this error: Class 'ProcessWire\TracyDebugger' not found on the default PW install basic-page -template. What could cause this error?

file protected => "/Library/WebServer/Documents/pw3/site/assets/cache/FileCompiler/site/templates/basic-page.php"

Share this post


Link to post
Share on other sites

My idea was one field with multiple checkboxes. For me re-setting settings isn't a big deal. The first checkbox (frontend and backend) needs to be two separate checkboxes but I guess you've already noticed that :)

Share this post


Link to post
Share on other sites

After upgrading to the latest version I get this error: Class 'ProcessWire\TracyDebugger' not found on the default PW install basic-page -template. What could cause this error?

file protected => "/Library/WebServer/Documents/pw3/site/assets/cache/FileCompiler/site/templates/basic-page.php"

Hi @Ipa,

Sorry about this. To populate the new "Variables" panel I am adding a line to the bottom of the compiled template files, but it includes a check to see if the class exists so I am not sure why you are getting that. Could you please post what that last line looks like for you?

Share this post


Link to post
Share on other sites

The first checkbox (frontend and backend) needs to be two separate checkboxes but I guess you've already noticed that :)

Do you mean that it needs to stay as is and separate from the newly proposed multiple checkbox fields that lists checkboxes for all the panels, or do you think that it actually needs to be a separate checkbox field for frontend and another separate one for backend? Sorry, i am not seeing why they need to be separate ones, but it's early here, so maybe just not awake?

Nevermind, you just mean separate options within the one checkbox field, together with all the panels. Although I actually think it might still make sense to leave this as a separate field, because it is not related to panels - it's the entire Debug Bar. Hoped that sounds ok to you.

I guess I could also set it up so that you could choose which panels appear on the frontend and which ones appear on the backend - make them separately configurable, although not sure if that would really be that useful?

Share this post


Link to post
Share on other sites

Hi @Ipa,

Sorry about this. To populate the new "Variables" panel I am adding a line to the bottom of the compiled template files, but it includes a check to see if the class exists so I am not sure why you are getting that. Could you please post what that last line looks like for you?

It looks like this: 

<?php if(class_exists("TracyDebugger")) $this->wire("templateVars", TracyDebugger::templateVars(get_defined_vars(), \ProcessWire\wire("page")));

By the way, my Upgrades page tells me that I have version 0.5.0 installed and the latest is 0.4.9?

Share this post


Link to post
Share on other sites

Nevermind, you just mean separate options within the one checkbox field, together with all the panels. Although I actually think it might still make sense to leave this as a separate field, because it is not related to panels - it's the entire Debug Bar. Hoped that sounds ok to you.

Sure, either way is OK to me if you ask me :)

I also got that weird 0.5 update issue lpa mentioned.

Share this post


Link to post
Share on other sites

I also got that weird 0.5 update issue lpa mentioned.

Does it stick around? or is it gone once you reload the page or something? Can you post the last line of one of your template files that is producing the error?

Nevermind - sorry I see that @Ipa has already posted his.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By joshua
      This module is (yet another) way for implementing a cookie management solution.
      Of course there are several other possibilities:
      - https://processwire.com/talk/topic/22920-klaro-cookie-consent-manager/
      - https://github.com/webmanufaktur/CookieManagementBanner
      - https://github.com/johannesdachsel/cookiemonster
      - https://www.oiljs.org/
      - ... and so on ...
      In this module you can configure which kind of cookie categories you want to manage:

      You can also enable the support for respecting the Do-Not-Track (DNT) header to don't annoy users, who already decided for all their browsing experience.
      Currently there are four possible cookie groups:
      - Necessary (always enabled)
      - Statistics
      - Marketing
      - External Media
      All groups can be renamed, so feel free to use other cookie group names. I just haven't found a way to implement a "repeater like" field as configurable module field ...
      When you want to load specific scripts ( like Google Analytics, Google Maps, ...) only after the user's content to this specific category of cookies, just use the following script syntax:
      <script type="optin" data-type="text/javascript" data-category="statistics" data-src="/path/to/your/statistic/script.js"></script> <script type="optin" data-type="text/javascript" data-category="marketing" data-src="/path/to/your/mareketing/script.js"></script> <script type="optin" data-type="text/javascript" data-category="external_media" data-src="/path/to/your/external-media/script.js"></script> <script type="optin" data-type="text/javascript" data-category="marketing">console.log("Inline scripts are also working!");</script> The type has to be "optin" to get recognized by PrivacyWire, the data-attributes are giving hints, how the script shall be loaded, if the data-category is within the cookie consents of the user. These scripts are loaded asynchronously after the user made the decision.
      If you want to give the users the possibility to change their consent, you can use the following Textformatter:
      [[privacywire-choose-cookies]] It's planned to add also other Textformatters to opt-out of specific cookie groups or delete the whole consent cookie.
      You can also add a custom link to output the banner again with a link / button with following class:
      <a href="#" class="privacywire-show-options">Show Cookie Options</a> <button class="privacywire-show-options">Show Cookie Options</button> This module is still in development, but we already use it on several production websites.
      You find it here: PrivacyWire Git Repo
      Download as .zip
      I would love to hear your feedback 🙂
      CHANGELOG
      0.0.5 Multi-language support included completely (also in TextFormatter). Added possibility to async load other assets (e.g. <img type="optin" data-category="marketing" data-src="https://via.placeholder.com/300x300">) 0.0.4 Added possibility to add an imprint link to the banner 0.0.3 Multi-language support for module config (still in development) 0.0.2 First release 0.0.1 Early development
    • By MoritzLost
      This is a new module that provides a simple solution to clearing all your cache layers at once, and an extensible interface to perform various cache-related actions.
      The simple motivation behind this module was that I was tired of manually clearing caches in several places after deploying a change on a live site. The basic purpose of this module is a simple Clear all caches link in the Setup menu which clears out all caches, no matter where they hide. You can customize what exactly the module does through it's configuration menu:
      Expire or delete all cache entries in the database, or selectively clear caches by namespace ($cache API) Clear the the template render cache. Clear out specific folders inside your site's cache directory (/site/assets/cache) Refresh version strings for static assets to bust client-side browser caches (this requires some setup, see the full documentation for details). This is the basic function of the module. However, you can also add different cache management action through the API and execute them through the module's interface. For this advanced usage, the module provides:
      An interface to see all available cache actions and execute them. A system log and logging output on the module page to see verify what the module is doing. A CacheControlTools class with utility functions to clear out different caches. An API to add cache actions, execute them programmatically and even modify the default action. Permission management, allowing you granular control over which user roles can execute which actions. The complete documentation can be found in the module's README.
      Beta release
      Note that I consider this a Beta release. Since the module is relatively aggressive in deleting some caches, I would advise you to install in on a test environment before using it on a live site.
      Let me know if you're getting any errors, have trouble using the module or if you have suggestions for improvement!
      In particular, can someone let me know if this module causes any problems with the ProCache module? I don't own or use it, so I can't check. As far as I can tell, ProCache uses a folder inside the cache directory to cache static pages, so my module should be able to clear the ProCache site cache as well, I'd appreciate it if someone can test that for me.
      Future plans
      If there is some interest in this, I plan to expand this to a more general cache management solution. I particular, I would like to add additional cache actions. Some ideas that came to mind:
      Warming up the template render cache for publicly accessible pages. Removing all active user sessions. Let me know if you have more suggestions!
      Links
      https://github.com/MoritzLost/ProcessCacheControl ProcessCacheControl in the Module directory

    • By David Karich
      Admin Page Tree Multiple Sorting
      ClassName: ProcessPageListMultipleSorting
      Extend the ordinary sort of children of a template in the admin page tree with multiple properties. For each template, you can define your own rule. Write each template (template-name) in a row, followed by a colon and then the additional field names for sorting.
      Example: All children of the template "blog" to be sorted in descending order according to the date of creation, then descending by modification date, and then by title. Type:
      blog: -created, -modified, title  Installation
      Copy the files for this module to /site/modules/ProcessPageListMultipleSorting/ In admin: Modules > Check for new modules. Install Module "Admin Page Tree Multible Sorting". Alternative in ProcessWire 2.4+
      Login to ProcessWire backend and go to Modules Click tab "New" and enter Module Class Name: "ProcessPageListMultipleSorting" Click "Download and Install"   Compatibility   I have currently tested the module only under PW 2.6+, but think that it works on older versions too. Maybe someone can give a feedback.     Download   PW-Repo: http://modules.processwire.com/modules/process-page-list-multiple-sorting/ GitHub: https://github.com/FlipZoomMedia/Processwire-ProcessPageListMultipleSorting     I hope someone can use the module. Have fun and best regards, David
    • By dimitrios
      Hello,
      this module can publish content of a Processwire page on a Facebook page, triggered by saving the Processwire page.
      To set it up, configure the module with a Facebook app ID, secret and a Page ID. Following is additional configuration on Facebook for developers:
      Minimum Required Facebook App configuration:
      on Settings -> Basics, provide the App Domains, provide the Site URL, on Settings -> Advanced, set the API version (has been tested up to v3.3), add Product: Facebook Login, on Facebook Login -> Settings, set Client OAuth Login: Yes, set Web OAuth Login: Yes, set Enforce HTTPS: Yes, add "https://www.example.com/processwire/page/" to field Valid OAuth Redirect URIs. This module is configurable as follows:
      Templates: posts can take place only for pages with the defined templates. On/Off switch: specify a checkbox field that will not allow the post if checked. Specify a message and/or an image for the post.
      Usage
      edit the desired PW page and save; it will post right after the initial Facebook log in and permission granting. After that, an access token is kept.
       
      Download
      PW module directory: http://modules.processwire.com/modules/auto-fb-post/ Github: https://github.com/kastrind/AutoFbPost   Note: Facebook SDK for PHP is utilized.


×
×
  • Create New...