Как я могу отладить модуль C ++ pybind11 с помощью lldb? - PullRequest
0 голосов
/ 04 августа 2020

Я пытался следовать инструкциям здесь , но получаю предупреждение unable to resolve breakpoint to any actual location. Вот что я делаю именно так. Сначала я компилирую код с флагом -g:

c++ -g -Wall -shared -std=c++11 -undefined dynamic_lookup `python3 -m pybind11 --includes` fractal.cpp -o fractal`python3-config --extension-suffix`

Затем я запускаю python из командной строки, которая настроена для запуска системы python 3.8.5. Я проверяю pid с помощью

ps aux | grep -i python

В другом окне терминала я запускаю lldb и набираю

attach --pid 77352

Остальное идет следующим образом:

(lldb) continue
Process 77352 resuming
(lldb) breakpoint set -f fractal.cpp -l 66
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.

Что мне не хватает? Поскольку pybind11 не выводит ошибки в коде C ++ до конца вызывающего python скрипта, я не могу просто вывести данные на экран, чтобы увидеть, где происходит сбой кода. Я хотел бы иметь возможность go выполнять код построчно.

Я использую macOS 10.15.5, если это имеет значение. Я также дважды проверил, что выбираю допустимую строку в fractal.cpp.

1 Ответ

1 голос
/ 04 августа 2020

Все, что вам нужно сделать сейчас, это import ваш модуль сейчас.

Пока он не импортирован, ни python, ни lldb не могут "знать" о существовании вашего волшебства файл (фрактал. cpp). После того, как вы импортируете его, lldb немедленно отреагирует:

1 location added to breakpoint 1

И затем, как только вы вызовете функцию с точкой останова в ней:

Process 8189 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x00000001011af3fa mypylib.cpython-38-darwin.so`add(i=1, j=2) at main.cpp:6:12
   3    namespace py = pybind11;
   4
   5    int add(int i, int j) {
-> 6        return i + j;
   7    }
   8
   9    PYBIND11_MODULE(mypylib, m) {
Target 0: (Python) stopped.
...