如何使用lldb调试C++pybind11模块



我试图按照这里的说明操作,但收到了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在调用python脚本结束之前不会在C++代码中打印错误,所以我不能只将内容打印到屏幕上查看代码的故障位置。我希望能够逐行地浏览代码。

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

您现在所需要做的就是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.

最新更新