Можно ли установить точки останова в скриптах PyDev? - PullRequest
0 голосов
/ 26 мая 2018

Я бы хотел установить точку останова в скрипте PyDev, написанном на Jython .Я пробовал различные конфигурации:

(1) Установка точки останова в редакторе Eclipse, но ничего не происходит.

(2 & 3) Форсирование трассировки путем добавления следующего кода в скрипт:

import template_helper

if False:
    py_context_type = org.python.pydev.editor.templates.PyContextType

def MyFunc(context):
    # option (2) - try pydevd with another eclipse session hosting debug server
    #import sys
    #sys.path.append(r"... pydev.core_6.3.3.201805051638\pysrc")
    #import pydevd; pydevd.settrace()

    # option (3) - try pdb
    import pdb; pdb.set_trace()
    return "some text"

template_helper.AddTemplateVariable(py_context_type, 'mysub', 'A desc', MyFunc)

Попытка pydevd (вариант 2) просто завершается с ошибкой, добавленной в error_log по строкам:

Caused by: Traceback (most recent call last):
  File "...\org.python.pydev.jython_6.3.3.201805051638\jysrc\template_helper.py", line 20, in resolveAll
    ret = self._callable(context)
  File "...\pydev_scripts\src\pytemplate_local.py", line 12, in MyFunc
    import pydevd; pydevd.settrace(stdoutToServer=True, stderrToServer=True)
  File "...\org.python.pydev.core_6.3.3.201805051638\pysrc\pydevd.py", line 1189, in settrace
    _locked_settrace(
  File "...\org.python.pydev.core_6.3.3.201805051638\pysrc\pydevd.py", line 1295, in _locked_settrace
    debugger.set_tracing_for_untraced_contexts(ignore_frame=get_frame(), overwrite_prev_trace=overwrite_prev_trace)
  File "...\org.python.pydev.core_6.3.3.201805051638\pysrc\pydevd.py", line 595, in set_tracing_for_untraced_contexts
    for frame in additional_info.iter_frames(t):
  File "...\org.python.pydev.core_6.3.3.201805051638\pysrc\_pydevd_bundle\pydevd_additional_thread_info_regular.py", line 117, in iter_frames
    current_frames = _current_frames()
  File "...\org.python.pydev.core_6.3.3.201805051638\pysrc\_pydevd_bundle\pydevd_additional_thread_info_regular.py", line 26, in _current_frames
    as_array = thread_states.entrySet().toArray()
AttributeError: 'java.lang.ThreadLocal' object has no attribute 'entrySet'

При попытке ванильного pdb (вариант 3) выводится приглашение (Pdb) вКонсоль PyDev Scripting, но нельзя вводить текст и переходить в интерактивный режим, например:

(Pdb) IOError: IOError(...nvalid',)
> ...\org.python.pydev.jython_6.3.3.201805051638\jysrc\template_helper.py(20)resolveAll()
-> ret = self._callable(context)
(Pdb) 

Возможно, это невозможно.Есть предложения?

1 Ответ

0 голосов
/ 07 июня 2018

В будущем я смог отладить сценарии, загрузив установщик jython 2.7.1 из maven .Затем я установил этот Jython во временную папку.После резервного копирования папки плагина jython, связанной с pydev, я скопировал и вставил соответствующие каталоги в установщик pydev jython вместе с копией пакета pydevd.Мне удалось выполнить отладку в отдельном экземпляре Eclipse после установки точки останова, как описано в моем варианте (2) выше.

Спасибо за вашу помощь в комментариях @ FabioZadrozny.

...