Done in the merge (started from the PyCharm version and bringing in things from PyDev): - Added modules which were unused in PyCharm but are used in PyDev. - execfile was upgraded to the PyDev version (it had errors with BOM in utf-8). - pydevd_file_utils: automatically doing normcase. - pyded: multiprocessing supporting 2 approaches (use new connection/use same connection). - pydev_monkey: fixes from PyDev to properly deal with windows command lines. - Private variables (name-mangled) are now evaluated (so they can be hovered). - Exceptions raised from lines with a #@IgnoreException are ignored. - Fixed exception changing variable in django debugging. - Made debugging with Django breakpoints a bit faster. - Exceptions separated by caught/uncaught, so, it's no longer needed to check an additional attribute to check it. - When exception is thrown evaluating breakpoint condition, the debugger will stop (can be configured in main_debugger.suspend_on_breakpoint_exception). - #@DontTrace comments can be used on methods so that they are ignored when stepping in (needs UI for CMD_ENABLE_DONT_TRACE). - Code which stops tracing inside python properties integrated (CMD_SET_PROPERTY_TRACE). - Find Referrers integrated. - Using same facade for IPython integration. - When the code is interrupted, the buffer in the python side is cleared. - GEvent debugging: improved PyDev not to use the threading module (uses the thread primitives directly), so, gevent debugging can work even if pydevd is used for remote debugging. Also, the gevent debugging should probably be closer to the stackless debugging, where we actually show the live stackless threads -- so, we should show the live gevent greenlets -- which the current version doesn't do (future work). - Supporting Jython 2.2 onwards (note: CPython only tested with 2.7/3.3) - When there are big sets/tuples/lists/dicts, the items won't be all shown so that the debugger speed doesn't suffer (the user should use the console if he wants to see those items in this case). The limit was set to show up to 300 items (pydevd_resolver.MAX_ITEMS_TO_HANDLE) - Monkey-patching qt (QThread/QRunnable) to enable the debugger to work. Notes: - It must be imported before the user actually runs its code (as the definitions of QThread/QRunnable are monkey-patched), so, for the remote debugger to work, pydevd must be imported at the start of the program, even if pydevd.settrace will only be used later on. Things to be fixed in PyCharm: -------------------------------- 1. CMD_VERSION now should receive that it wants breakpoints by ID (and it should give a breakpoint id which should be used to remove it later when setting a breakpoint). 2. Setting breakpoint: the func_name is not being properly passed from PyCharm (and as such, PyCharm debugging is slower than it should be). Note that it works passing 'None', but the func_name should be given when possible. I.e.: class MyClass(object): def __init__(self): print('here') # Break here: '__init__' as func_name print(a) def bar(self): print('bar') # Break here: 'bar' as func_name 3. Note (may not need to change anything): Removed support for removing breakpoint without knowing its type (i.e.: remove breakpoint tried to remove a breakpoint if the type wasn't python-line nor django-line, now, it'll give an exception). 4. break_on_exceptions_thrown_in_same_context / ignore_exceptions_thrown_in_lines_with_ignore_exception These are currently set in the bulk operation to add exceptions, but it does make sense to create a separate command for that (but it's only worth doing it when/if PyCharm gets an UI to add it). 5. UI to ignore exception from additional places (not only from #@IgnoreException code-comments) i.e.: UI for CMD_IGNORE_THROWN_EXCEPTION_AT. 6. UI to show the current exception (i.e.: deal with CMD_SEND_CURR_EXCEPTION_TRACE and CMD_SEND_CURR_EXCEPTION_TRACE_PROCEEDED in the client side). 7. When an exception is detected on a breakpoint condition evaluation, we'll send a CMD_GET_BREAKPOINT_EXCEPTION (which should be handled by PyCharm to show some UI notification). 8. The CMD_ENABLE_DONT_TRACE must be sent from the UI to skip methods which have an #@DontTrace above it. 9. The CMD_SET_PROPERTY_TRACE must be sent from the UI to skip setter/getter/deleter python properties. 10. Integrate find referrers UI in PyCharm. In the backend it uses a CMD_RUN_CUSTOM_OPERATION with: from pydevd_referrers import get_referrer_info get_referrer_info 11. CMD_RELOAD_CODE has to be integrated (when a file changes it should be issued for 'hot' auto-reload of the code -- note that it's not needed if the user already has some sort of auto-reload builtin -- i.e.: django without the noreload option). 12. Console Completions: See: pydev_ipython_console_011.PyDevFrontEnd.getCompletions Now we're completing as they come from the IPython backend (i.e.: not stripping % for magic commands). 13. In PyDev, interrupt can be used to clear the current buffer (whereas in PyCharm it's only possible to activate it to stop the execution of a command) -- note that this is only a client-side limitation. 14. Console GUI event loop can have some UI integrated. Note that the user can enable it manually (i.e.: by writing something as "%gui qt" the qt backend is integrated, but it's possible to call 'enableGui' with the backend to use from PyCharm too -- in PyDev this is an option with the possible backends). Things to be fixed in PyDev: -------------------------------- .Provide UI for 'smart step into' (later) . Check what to do with 'message' from xml (later) . Deal with sendSignatureCallTrace (later) . Set IPYTHONENABLE to False/True to use IPython console (later) Manual test: --------------- * Support for IPython GUI event loop in console * Django template debugging * Gevent debugging * Smart step into * Collection of type information of arguments in debug mode * Ability to stop tracing * Ability to run debugger and console on remote interpreter