GNU/Linux emacs user for Python dev.
The ability to browser a code easily, when you don't actually know the code, is a lot of time that will be saved.
Pycharm is the best tool I know that does it out of the box.
I don't know about its debugging facility (I think you mean setting break points), probably https://github.com/narfdotpl/debug will work just fine. I've been doing 1 year and a half of debugging Python code and used it three times. Most of the time the workflow is this:
0) add logs?
1) reproduce the bug
2) read the logs?
3) read the code?
4) if the best fix is found fix it else restart at 0)
Other useful tools for debugging:
- http://dpaste.com/hold/1751069/ this is the basic version of what I use at work. It's a data descriptor [1]
- http://faulthandler.readthedocs.org/ "for when there is no traceback"
- Since you do UI, most likely you'll deal with asynchronous callback style code (non-yield based), the traceback of a callback is not always useful ie. you want to know to which code it is answering to. For that matter you need tweak the event-loop code... having this patch at hand is helpful. e.g. say you do a asynchronous call to retrieve something in the database, the call probably looks like "query(callback=query_callback)", when the "query_callback" will be called by the event loop with the result of the query as arguments, most likely the immediate top frame is the event-loop (if it's not the previous frame, it's the one before...) and "query" function will not be in the callstack of course... If "query_callback" is used as a callback of several asynchronous calls, you can not find the "calling code" with "find usage" of your IDE... I think asyncio fix this
Profiling:
- http://www.vrplumber.com/programming/runsnakerun/
- https://github.com/bdarnell/plop
- https://github.com/wyplay/pytracemalloc it is integrated in Python 3.4
I also use gdb on python coredumps.
[1] http://www.cafepy.com/article/python_attributes_and_methods/...