如何使用 lldb 调试 C++ pybind11 模块?
How can I debug C++ pybind11 module with lldb?
我尝试按照说明进行操作 here,但收到 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
在另一个终端 window,我启动 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++ 代码中打印错误,因此我不能只是将内容打印到屏幕上以查看代码在哪里出现故障。我希望能够逐行查看代码。
我使用的是 macOS 10.15.5
,如果有什么不同的话。我还仔细检查了我在 fractal.cpp
.
中选择了一个有效行
您现在需要做的就是 import
您的模块。
虽然它没有导入,但 python 和 lldb 都不能“知道”您的源文件 (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.
我尝试按照说明进行操作 here,但收到 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
在另一个终端 window,我启动 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++ 代码中打印错误,因此我不能只是将内容打印到屏幕上以查看代码在哪里出现故障。我希望能够逐行查看代码。
我使用的是 macOS 10.15.5
,如果有什么不同的话。我还仔细检查了我在 fractal.cpp
.
您现在需要做的就是 import
您的模块。
虽然它没有导入,但 python 和 lldb 都不能“知道”您的源文件 (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.