无法在共享对象库中插入断点x,使用c ++中的.so库的python

问题描述

我正在尝试分析使用pybind11制成.so文件的c ++。 .so文件具有python API,因此主python程序使用python API并调用.so文件中的函数。我对python(pdb)和c ++(gdb)使用了两个调试器。 当我在gdb中设置断点时,出现此错误

Cannot insert breakpoint 1.
Cannot access memory at address 0xb41798

当我在c ++中设置断点时,没有任何抱怨,但是当程序在python中恢复时,我在c ++调试窗口中看到此错误消息。我该如何解决这个问题?

ADD:这是运行调试器的方式。
对于pdb:python3 -m pdb test.py对于gdb:ddd /usr/loca/.../dlib...gnu.so 10498,其中10498是python程序的进程ID。
我制作了.so文件(将dlib c ++转换为包含python API的.so文件),如下所示:
sudo python3 setup.py install --clean --set USE_AVX_INSTRUCTIONS=1 --set DLIB_USE_CUDA=1 --set CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" --compiler-flags "-O0 -g"
setup.cfg文件具有

[build_ext]  
debug = 1

可能是我制作.so文件的方式有问题吗?

解决方法

对于gdb:ddd /usr/loca/.../dlib...gnu.so 10498

您的DDD调用不正确:进程10498正在运行dlib...gnu.so二进制文件,不是 ,它正在运行python3的{​​{1}}二进制文件加载到其中。

您需要这样调用它:.so

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...