我有嵌入Python的代码。嵌入式 Python 使用 NumPy,因此,我需要显式加载
libpython
,以使 NumPy 工作。
驱动代码是C++(在Google Test中测试)。某处出现错误,我尝试使用
gdb
进行调试。然而,当我简单地运行可执行文件和在gdb
下运行可执行文件时,由于嵌入式版本不同,会发生一些奇怪的事情。
我通过在初始化的嵌入式Python下实例化
libpython
模块然后使用sysconfig
找到了sysconfig.get_config_var("LIBDIR")
的路径。
我将找到的路径记录到
libpython
,然后我只需运行可执行文件:
Path to libpython is /home/dima/.conda/envs/um02-open-interfaces/lib
当我在
gdb
下运行相同的可执行文件时:
Path to libpython is /home/linuxbrew/.linuxbrew/opt/[email protected]/lib
如何阻止
gdb
改变环境?
如何阻止gdb改变环境?
GDB 不会自行改变环境。但是,它确实调用您的$SHELL
,并且如果您有
~/.bashrc
或类似文件更改环境,那么这些更改将影响GDB
run
命令调用的任何进程。您可以通过运行
$SHELL -c /path/to/your/program
来确认是否发生这种情况。如果它打印到
libpython
的错误路径,这可能是根本原因。修复方法是让
.bashrc
仅更改交互式 shell 的环境。 您还可以使用 GDB
$SHELL
(文档
)禁用中间
set startup-with-shell off
。