Как запустить GDB для C++, вызванный из Python?

Мне нужно отладить функцию C++, которая вызывается из кода Python.

Как запустить GDB (или лучше DDD) таким образом, чтобы он отлаживал код C++, вызываемый из заданной командной строки Python?

Данная командная строка Python:

python3 -m e2e.Tests.Libs.HundredEightyOneTest

Он вызывает код C++, который мне нужно отлаживать.


person porton    schedule 11.06.2020    source источник
comment
На какой операционной системе? А какая версия питона?   -  person Basile Starynkevitch    schedule 11.06.2020


Ответы (1)


Моя рекомендация: перекомпилируйте ваш интерпретатор python из его исходного кода (чтобы он был скомпилирован с DWARF отладочная информация, практически говоря с GCC вызвал как gcc -Wall -O -g).

Как только вы получите такой интерпретатор python3 (с отладочной информацией DWARF), возможно, в /usr/local/bin/python3, прочитайте документацию по Python документацию GDB и запустите

gdb --args /usr/local/bin/python3 -m e2e.Tests.Libs.HundredEightyOneTest

Конечно, вы скомпилировали свой код C++, встроенный в Python, например. g++ -Wall -Wextra -g и, возможно, -fPIC, а вашим функциям C++ иногда может понадобиться extern "C". См. мини-руководства по C++ dlopen, поскольку Python обычно использует dlopen(3).

Дополнительные инструкции можно найти на странице LinuxFromScratch.

Относительно использования DDD прочтите его документацию. Он работает gdb.

Вы можете запустить gdb из GNU emacs или с его опцией --tui.

Вы можете перекомпилировать последнюю GDB из исходного кода, поскольку она бесплатное программное обеспечение, чтобы воспользоваться новейшими функциями. И аналогично даже для GCC (по тем же причинам).

Вы можете заглянуть внутрь исходного кода вашего интерпретатора Python, так как он с открытым исходным кодом.

person Basile Starynkevitch    schedule 11.06.2020