Оптимизированный отладчик Python, как и любое другое программное обеспечение, может сильно отличаться по производительности (я автор PyDev, и я сделал отладчик PyDev, поэтому я могу комментировать его, но недругие, поэтому я просто объясню немного об оптимизации отладчика Python - поскольку я потратил много времени на оптимизацию отладчика PyDev - я не буду говорить о других реализациях, так как я не знаю, как онибыло сделано - за исключением pdb, но pdb на самом деле не является быстрой реализацией отладчика после того, как она достигает точки останова и вы проходите через нее, хотя она работает хорошо, выполняя неотслеживаемые вещи, пока вы фактически не выполните код, который начнет трассировкуваш код).
В частности, любой «наивный» отладчик может значительно замедлить вашу программу, просто включив трассировку Python в каждом кадре и проверив, есть ли совпадение точек останова для каждой выполняемой строки (примерно так работает pdb).: всякий раз, когда вы вводите контекст, он отслеживает его, и для каждой вызываемой строки он проверяет разрывoint соответствует этому, поэтому я полагаю, что любая реализация, которая рассчитывает на быструю реализацию, не может полагаться на нее).
Я знаю, что отладчик PyDev имеет несколько оптимизаций ... главная из них заключается в следующем: когдаотладчик входит в новый фрейм (то есть: функция), он проверит, есть ли «потенциальная» точка останова, которая может быть достигнута, и если нет, она даже не отследит эту функцию (с другой стороны, когда точка останова будет добавлена позжепосле выполнения программы она должна будет переоценить все предыдущие предположения, поскольку любой текущий кадр может в конечном итоге пропустить точку останова).И если он определит, что какой-то кадр должен быть прослежен, он создаст новый экземпляр для этого кадра, который будет отвечать за кэширование всего, что связано с этим кадром (это действительно было возможно только в Python 2.5, поэтому при работе над Python 2.4и ранее, если не установлено расширение threadframe, отладчик будет пытаться эмулировать это, что значительно замедлит его на Python 2.4).
Кроме того, отладчик PyDev в настоящее время использует преимущества Cython, хотя этоограничивается только CPython ... Jython, IronPython и PyPy не используют его в своих интересах), поэтому многие оптимизации по-прежнему выполняются с учетом режима чистого Python (к счастью, Cython достаточно близок к Python, так что для внесения изменений требуется малоэто работает быстрее на CPython с Cython).
Некоторые связанные посты, касающиеся эволюции оптимизации отладчика PyDev:
http://pydev.blogspot.co.id/2017/03/pydev-560-released-faster-debugger.html
http://pydev.blogspot.co.id/2016/01/pydev-451-debug-faster.html
http://pydev.blogspot.com/2008/02/pydev-debugger-and-psyco-speedups.html
http://pydev.blogspot.com/2005/10/high-speed-debugger.html
В любом случае, запуск с отладчиком на месте будетвсегда добавляйте некоторые накладные расходы (даже если они сильно оптимизированы, такие как отладчик PyDev), поэтому PyDev также предоставляет тот же подход, который может быть использован в pdb: добавьте точку останова в коде, и он начнет отслеживать только в этой точке (которая являетсяфункция удаленного отладчика PyDev): http://pydev.org/manual_adv_remote_debugger.html
И в зависимости от функций, которые вы хотите, чтобы отладчик поддерживал, он также может быть медленнее (например: когда вы включаете разрыв для пойманных исключений в PyDev, программа будетвыполняется медленнее, потому что для правильного разбиения потребуется отслеживать больше вещей).