提问者:小点点

如何使用LLDB调试C++pybind11模块?


我尝试按照这里的说明进行操作,但是我得到了无法将断点解析到任何实际位置警告。 下面是我的工作。 我首先用-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在调用python脚本结束之前不会打印C++代码中的错误,所以我不能仅仅将内容打印到屏幕上以查看代码的故障所在。 我希望能够逐行查看代码。

我使用的是macOS10.15.5,如果它有什么不同的话。 我还仔细检查了在fractal.cpp中选择了有效的行。


共1个答案

匿名用户

您现在需要做的就是import您的模块。

虽然没有导入,但python和lldb都无法“知道”sorce文件(fractal.cpp)的存在。 导入后,LLDB将立即响应:

1 location added to breakpoint 1

然后一旦您调用了带有breakpont的函数:

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.

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(lldb|调试|c++pybind11|模块)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?