Отладка кода C/C++ с помощью IPython

Скажем, я нахожусь в IPython (например, в новая консоль QT), и что я вызываю написанную из нее библиотеку C++ (например, используя SWIG или Boost.Python). Я хотел бы установить точку останова в своем коде C++ и иметь возможность взаимодействовать с моей рабочей областью C++ (т.е. с моими переменными, когда я нажимаю точку останова) с помощью IPython (например, отображать мои переменные C++ и т. д.) .

Другими словами, я хотел бы отлаживать свой код C++ из IPython. Это вообще возможно? Какие инструменты я могу использовать для этого?


person Amelio Vazquez-Reina    schedule 22.07.2012    source источник
comment
Вы пробовали новые расширения Python в gdb 7? Я знаю, что это не IPython, но с ними можно многое сделать. Эта статья — лишь один из многих примеров того, как его использовать. misspent.wordpress.com/2012/03/24/   -  person dcolish    schedule 22.07.2012


Ответы (2)


(при условии, что вы работаете в Linux) Вам просто нужен gdb. Сначала настройте конфигурацию, сообщающую gdb, где находятся ваши исходные файлы, добавив это в $HOME/.gdbinit: directory absolute-path-to-source

Теперь запустите gdb python и в командной строке gdb выполните: set args /usr/bin/ipython run

Вы не можете сделать gdb ipython напрямую, потому что ipython — это скрипт. Пожалуйста, обратитесь к документации gdb отсюда.

person rwst    schedule 12.12.2015
comment
Таким образом, я не получаю подсказку IPython, я вижу только IPython 5.1.0 — улучшенный интерактивный Python. ? -› Введение и обзор возможностей IPython. %quickref -> Краткий справочник. help -> собственная справочная система Python. объект? -> Подробности об «объекте», используйте «объект??» для получения дополнительной информации. но ни подсказки, ни эха консоли :-( (это с lldb, но все же...) - person Dima Pasechnik; 19.09.2017
comment
Он работает с Python 2.7.13/IPython 3.2.2 на OpenSuSE Leap 42. Я не тестировал его с другими версиями, извините. - person rwst; 20.09.2017

Как правило, вы не сможете отлаживать код C++ напрямую с помощью IPython. Однако вы можете использовать отладчик C++ для отладки кода C++.

По сути, вы указываете своему отладчику C++ выполнить любой процесс, который вам нужно использовать для запуска вашего кода (это может быть сам IPython), и устанавливаете точку останова в вашем коде C++ (ваш отладчик будет знать, что нужно дождаться загрузки соответствующей DLL, если это в DLL). Оттуда вы отлаживаете свою часть кода, которая выполняется в процессе IPython.

person Greg Hewgill    schedule 22.07.2012