【问题标题】:How can I debug C++ pybind11 module with lldb?如何使用 lldb 调试 C++ pybind11 模块?
【发布时间】:2020-11-24 16:03:38
【问题描述】:

我尝试按照说明进行操作 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

在另一个终端窗口中,我启动 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 中选择的有效行。

【问题讨论】:

    标签: python c++ lldb pybind11


    【解决方案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.
    

    【讨论】:

    • 我需要以某种方式将其导入lldb 吗?或者在我运行的 python 提示符中导入它?后者似乎不起作用。
    • 你需要让你的模块被加载到你正在调试的 Python 中,所以在 Python 中运行“import”命令。
    • 然后你可以通过process interrupt中断lldb中的执行并运行image list来检查库是否实际加载。您的新 dylib 在列表中吗?它是您期望的位置吗(也许还有另一个没有调试信息?)。您可以运行source info -f fractal.cpp 来查看它是否有源信息......
    • 好的,成功了!我想我也弄错了pid。我做了os.getpid(),因为有十亿个python进程正在运行(感谢neovim)。您想在答案中更详细地添加导入部分,以便其他可能有相同问题的人更清楚吗?
    猜你喜欢
    • 2015-12-20
    • 2014-12-10
    • 1970-01-01
    • 2023-02-26
    • 2013-02-26
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多