GDB下的可执行文件调用不同的嵌入式Python

问题描述 投票:0回答:1

我有嵌入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
改变环境?

python linux gdb python-c-api
1个回答
0
投票

如何阻止gdb改变环境?

GDB 不会自行改变环境。但是,它确实调用您的$SHELL

,并且如果您有
~/.bashrc
或类似文件更改环境,那么这些更改将影响GDB 
run
命令调用的任何进程。

您可以通过运行

$SHELL -c /path/to/your/program

来确认是否发生这种情况。如果它打印到 
libpython
 的错误路径,这可能是根本原因。

修复方法是让

.bashrc

 
更改交互式 shell 的环境。

您还可以使用 GDB

$SHELL

文档
)禁用中间 
set startup-with-shell off

© www.soinside.com 2019 - 2024. All rights reserved.