inducer / pudb

Full-screen console debugger for Python
https://documen.tician.de/pudb/
Other
2.99k stars 229 forks source link

2024.1 display clobbered with internal pudb [DEBUG] messages. #649

Closed cederom closed 6 months ago

cederom commented 6 months ago

Describe the bug

To Reproduce Steps to reproduce the behavior:

  1. Create python venv.
  2. pip install pudb.
  3. insert import pudb; pu.db in your application.
  4. run the application trigger the debugger.
  5. see that each arrow key press results in additional [DEBUG] messages overwriting the screen.

Expected behavior

Screenshots

pudb-problem-20240429

Additional context

Versions

inducer commented 6 months ago

That's a fair point. We should probably call catch_warnings on entry to the UI, then resetwarnings, and then override showwarning to direct Pudb's own log messages to its built-in console.

PRs implementing this would be welcome.

cederom commented 6 months ago

Or just add --log-level switch / setting? :-)

inducer commented 6 months ago

I mean, we really need to keep pudb's log level separate from that of the application, despite both of them running with the same Python runtime.

inducer commented 6 months ago

Huh, I just realized I am talking about warnings, while you are talking about logging. The two are distinct, and both need handling.

inducer commented 6 months ago

650 handles the warning end of this.

cederom commented 6 months ago

Negative :-( still here :-( Its like loglevel DEBUG is enabled somehow o_O

pudb-problem-20240429-2
inducer commented 6 months ago

Sure. #650 was never going to help with logging, only warnings, sorry. PRs still welcome.

cederom commented 6 months ago

Okay, this is caused by the Kivy framework that I use attaching to a root logger by default [1] thus also capturing pudb logger that also seems to attach to the root logger. Quck fix is to use PYTHON or MIXED mode in Kivy logger when working with pudb.

[1] https://github.com/kivy/kivy/blob/4a8caf561c37944a21bc004bf8faae2d8237e8a1/kivy/logger.py#L78

pjkersten commented 6 months ago

Ran into this while debugging a Flask app on linux. Would it be possible to ignore the logger.basicConfig settings to prevent this from happening?

inducer commented 6 months ago

The approach I would prefer would be to swap out the logging configuration for one that logs to pudb's built-in console while the UI is active, similar to #650. Not at the top of my list, but PRs definitely still welcome.

cederom commented 6 months ago

Ran into this while debugging a Flask app on linux. Would it be possible to ignore the logger.basicConfig settings to prevent this from happening?

The problem is using root logger by both pudb and your application (Python uses object references not copies). In my case (Kivy) it was possible to change application behavior not to capture and dump everything from the root logger (see description above). That solved clobbered display for me. I guess Flask can be configured in a similar way but I have no experience with Flask sorry.

I guess the best solution would be setting up some sort of internal logger (handler) dedicated for pudb and use its output only in built-in console.