首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么gdb不喜欢别名

为什么gdb不喜欢别名
EN

Unix & Linux用户
提问于 2018-02-08 00:05:05
回答 3查看 1.8K关注 0票数 10

我制作了一个别名ff,并从~/.zsh/aliases.zsh获得了它。

别名本身运行良好:

代码语言:javascript
复制
alias ff
ff='firefox --safe-mode'

而且按预期运行。

但是,当我尝试在gdb下运行它时,我得到:

代码语言:javascript
复制
> gdb ff
GNU gdb (Debian 7.12-6+b1) 7.12.0.20161007-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
...
For help, type "help".
Type "apropos word" to search for commands related to "word"...
ff: No such file or directory.
(gdb) quit

我试过使用gdb firefox --safe-mode,但它无法运行。

有人能辨认出什么不对劲吗?

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2018-02-08 00:11:21

别名是外壳的一个特征。定义别名将创建一个新的shell命令名。它只被shell识别,并且只有在它作为命令名出现时才被识别。

例如,如果您键入

代码语言:javascript
复制
> ff

在shell提示符下,它将调用您的别名,但如果您键入

代码语言:javascript
复制
> echo ff

ff只是一个参数,而不是命令。(至少在bash中,如果别名定义以空格结尾,则可以使用一些技巧。如果您决定使用shell别名,请参阅Stéphane Chazelas的答复以获得可能的解决方案。)

你打字了

代码语言:javascript
复制
> gdb ff

因此,shell调用gdb,将字符串ff作为参数传递给它。

您可以通过gdb命令行将参数传递给调试程序,但您必须使用--args选项。例如:

代码语言:javascript
复制
> gdb firefox --safe-mode

尝试(并失败)将--safe-mode视为gdb的选项。要使用参数运行命令,可以手动执行:

代码语言:javascript
复制
> gdb firefox
...
(gdb) run --safe-mode

或者,正如瑟格的回答提醒我的那样,您可以使用--args

代码语言:javascript
复制
> gdb --args firefox --safe-mode
...
(gdb) run

( --args之后的第一个参数是命令名;其余所有参数都传递给被调用的命令。)

可以从shell别名中提取参数,但我建议只定义一个单独的别名:

代码语言:javascript
复制
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'

或者,更好的是使用shell函数,这些函数具有更多的功能。巴什手册上说:

对于几乎所有的用途,shell函数都比别名更好。

票数 20
EN

Unix & Linux用户

发布于 2018-02-08 11:38:26

在POSIX中,别名仅在命令位置(在任何需要命令的位置)或在别名之后展开,其扩展以空白字符结束(在zsh中,只有空格,在许多其他实现中,只有空格或制表符)。您还需要--args选项到gdb,以便能够将参数传递给正在调试的程序。所以你可以:

代码语言:javascript
复制
alias gdba='gdb --args ' # note the trailing space which does mean
                         # that aliases are to be expanded after it
alias ff='firefox --safe-mode'
gdba ff

such还支持在更多地方扩展的全局别名(使用alias -g),但您可能不希望在这里为firefox --safe-mode使用这样的别名,因为您不希望echo ff输出ff以外的任何内容。

票数 4
EN

Unix & Linux用户

发布于 2018-02-08 11:31:02

您不需要别名来尝试获得gdb接受参数。

就你而言,这将是:

代码语言:javascript
复制
gdb firefox
(gdb) set args --safe-mode
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/422685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档