Eclipse: отладочная общая библиотека, загруженная из python - PullRequest
3 голосов
/ 29 ноября 2011

В Linux я пытаюсь отладить код C ++ разделяемой библиотеки, которая загружается из кода Python. Загрузка выполняется с использованием пакета ctypes. В Eclipse я устанавливаю точки останова как в Python, так и в коде C ++, однако Eclipse просто пропускает точки останова в коде C ++ (точки останова в коде Python работают нормально).

Я попытался использовать attach to application в Eclipse (в разделе «Настройки отладки») и выбрать процесс Python, но это ничего не изменило. В диалоговом окне attach to application я выбираю общую библиотеку в качестве проекта и выбираю /usr/bin/python2.6 в качестве C/C++ application. Это правильный путь?

Я пробовал это как до запуска кода Python, так и после того, как точка перехвата в коде Python была обнаружена, непосредственно перед строкой, вызывающей функцию разделяемой библиотеки.

EDIT

Между тем я использую обходной путь вызова кода Python и отладки с помощью сеанса командной строки gdb, подключаясь к процессу python. Но я бы хотел услышать решение этой проблемы из Eclipse.

1 Ответ

1 голос
/ 29 декабря 2015

Мне удалось отладить разделяемую библиотеку c ++, загруженную питоном в Eclipse.

Пререквизиты: Два проекта eclipse в рабочей области eclipse: один - это проект C ++, из которого создается общая библиотека c ++, другой - проект python (PyDev), который загружает сгенерированную общую библиотеку c ++.

Шаги:

  1. создать конфигурацию отладки " Python Run " с именем PythonDebug с соответствующей средой Python и параметрами
  2. создать конфигурацию отладки " C / C ++ Attach to Application " с именем CppDebug . Поле проекта является проектом C ++, оставьте поле C / C ++ Application пустым
  3. установить точку останова в коде Python, где после загрузки разделяемой библиотеки c ++
  4. запустить сеанс отладки PythonDebug , программа будет остановлена ​​на созданной точке останова на шаге 3
  5. запустить сеанс отладки CppDebug , появится меню, выберите процесс Python с правильным pid (будет 3 pids, правильный можно найти в сеансе PythonDebug)
  6. установить точку останова в исходном коде c ++, где вы хотите, чтобы программа сломала
  7. продолжить PythonDebug сеанс
  8. продолжить CppDebug сеанс
  9. программа остановится на точке останова c ++

Я протестировал описанную выше процедуру с версией Eclipse Mars.

Надеюсь, это поможет.

...