2017-04-11 24 views
0

每次我尝试运行GDB什么,我会见了以下错误消息:GDB使我的SHELL复位到当前的可执行

Error: No such file or directory 
During startup program exited with code 127. 

在这里搜索的时候,我发现,这可能发生当SHELL变量未正确设置时,并且实际上在运行GDB解决当前会话的问题之前正在运行export SHELL=/bin/bash --login

但是,尽管echo $SHELL已经吐出了所需的值,如果我看的命令GDB试图执行接近时,它通常采取以下形式:

/path/to/mybin -c exec /path/to/mybin --my --opts 

,而不是

$SHELL -c exec /path/to/mybin --my --opts 

也就是说,GDB莫名其妙重置SHELL指向我传递任何可执行它在开始运行之前。 (我使用格式gdb --args /path/to/mybin --my --opts来启动GDB。)在运行之前和之后,SHELL具有正确的值。如果我尝试在一行中调试三个不同的可执行文件,那么这三个可执行文件中的每一个都将被用作它自己的shell,这显然会导致失败。 如果我甚至一次运行export SHELL=(acceptable shell),它将在本次会议剩余时间内正常工作。

我的shell dotfile(.bashrc,.profile等)没有任何引用或修改SHELL变量。这种行为对我来说似乎完全不可理解。有没有人有一个想法可能会发生什么?

我在Ubuntu 14.04的bash-4.3.11中使用gdb-7.7.1。

编辑:我错了一个重要的细节。正在运行export SHELL=/bin/bash --login实际上不能纠正它。如果我这样做,同样的问题仍然存在。 (这也是我的壳,我看看,如果我进入show env SHELLgdb是行不通的。但是,设置export SHELL=/bin/bash确实纠正问题,所以登录shell是有点问题,我猜的默认值。

+0

当事情工作不正常,'(gdb)显示env SHELL'显示什么? –

+0

我刚编辑了我原来的问题。 'show env SHELL'打印'/ bin/bash --login' – xanderflood

回答

0

的问题是几乎可以肯定你的~/.bashrc但很难猜测它是从你的描述

步骤1:

mv ~/.bashrc ~/.bashrc.save.20170411 

注销并重新验证GDB工作得很好

步骤2:

将.bashrc.save.20170411的部分复制到〜/ .bashrc,并重复注销/登录循环,直到GDB停止再次运行。

第3步:

现在你知道了部分造成麻烦,并且可以问更好的问题,如果你还是不明白为什么.bashrc该块是有问题的。

+0

我移动了我的'.bashrc','.profile'和'.bash_profile',(然后打开了一个新的shell),并且它出乎意料地没有解决问题。运行'/ bin/bash -v'显示有一些启动命令仍在运行,但我不确定它们来自哪里,因为我没有'/ etc/.bash *',''/etc/bash *'或'/ etc/environment'。 – xanderflood

+0

@xanderflood您登出或只是打开一个新窗口吗?同时看看'BASH_ENV'和'ENV'的值(并取消它们)。 –

相关问题