why doesn't gdb like aliases [duplicate]
Clash Royale CLAN TAG#URR8PPP
up vote
10
down vote
favorite
This question already has an answer here:
Why does sudo ignore aliases?
4 answers
Why would `sudo cp src dst` ignore no clobber rule in /etc? [duplicate]
1 answer
I made an alias ff
and sourced it from ~/.zsh/aliases.zsh
.
The aliases run well themselves:
alias ff
ff='firefox --safe-mode'
and it runs as expected.
But when I try to run it under gdb
I get:
> 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
I tried using gdb firefox --safe-mode
but that wouldn't run.
Can somebody identify what is wrong?
linux shell alias gdb
marked as duplicate by muru, Gilles, G-Man, dhag, Isaac Feb 9 at 2:19
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |Â
up vote
10
down vote
favorite
This question already has an answer here:
Why does sudo ignore aliases?
4 answers
Why would `sudo cp src dst` ignore no clobber rule in /etc? [duplicate]
1 answer
I made an alias ff
and sourced it from ~/.zsh/aliases.zsh
.
The aliases run well themselves:
alias ff
ff='firefox --safe-mode'
and it runs as expected.
But when I try to run it under gdb
I get:
> 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
I tried using gdb firefox --safe-mode
but that wouldn't run.
Can somebody identify what is wrong?
linux shell alias gdb
marked as duplicate by muru, Gilles, G-Man, dhag, Isaac Feb 9 at 2:19
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
Maybe usegdb zsh -c ff
instead.
â Isaac
Feb 8 at 0:07
5
gdb isnâÂÂt a shell
â Jeff Schaller
Feb 8 at 0:09
Oh, looks like I copied the wrong URL there. Should have been Why does sudo ignore aliases?
â muru
Feb 8 at 5:17
add a comment |Â
up vote
10
down vote
favorite
up vote
10
down vote
favorite
This question already has an answer here:
Why does sudo ignore aliases?
4 answers
Why would `sudo cp src dst` ignore no clobber rule in /etc? [duplicate]
1 answer
I made an alias ff
and sourced it from ~/.zsh/aliases.zsh
.
The aliases run well themselves:
alias ff
ff='firefox --safe-mode'
and it runs as expected.
But when I try to run it under gdb
I get:
> 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
I tried using gdb firefox --safe-mode
but that wouldn't run.
Can somebody identify what is wrong?
linux shell alias gdb
This question already has an answer here:
Why does sudo ignore aliases?
4 answers
Why would `sudo cp src dst` ignore no clobber rule in /etc? [duplicate]
1 answer
I made an alias ff
and sourced it from ~/.zsh/aliases.zsh
.
The aliases run well themselves:
alias ff
ff='firefox --safe-mode'
and it runs as expected.
But when I try to run it under gdb
I get:
> 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
I tried using gdb firefox --safe-mode
but that wouldn't run.
Can somebody identify what is wrong?
This question already has an answer here:
Why does sudo ignore aliases?
4 answers
Why would `sudo cp src dst` ignore no clobber rule in /etc? [duplicate]
1 answer
linux shell alias gdb
edited Feb 11 at 12:56
Rui F Ribeiro
35k1269113
35k1269113
asked Feb 8 at 0:05
shirish
3,26342273
3,26342273
marked as duplicate by muru, Gilles, G-Man, dhag, Isaac Feb 9 at 2:19
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by muru, Gilles, G-Man, dhag, Isaac Feb 9 at 2:19
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
Maybe usegdb zsh -c ff
instead.
â Isaac
Feb 8 at 0:07
5
gdb isnâÂÂt a shell
â Jeff Schaller
Feb 8 at 0:09
Oh, looks like I copied the wrong URL there. Should have been Why does sudo ignore aliases?
â muru
Feb 8 at 5:17
add a comment |Â
Maybe usegdb zsh -c ff
instead.
â Isaac
Feb 8 at 0:07
5
gdb isnâÂÂt a shell
â Jeff Schaller
Feb 8 at 0:09
Oh, looks like I copied the wrong URL there. Should have been Why does sudo ignore aliases?
â muru
Feb 8 at 5:17
Maybe use
gdb zsh -c ff
instead.â Isaac
Feb 8 at 0:07
Maybe use
gdb zsh -c ff
instead.â Isaac
Feb 8 at 0:07
5
5
gdb isnâÂÂt a shell
â Jeff Schaller
Feb 8 at 0:09
gdb isnâÂÂt a shell
â Jeff Schaller
Feb 8 at 0:09
Oh, looks like I copied the wrong URL there. Should have been Why does sudo ignore aliases?
â muru
Feb 8 at 5:17
Oh, looks like I copied the wrong URL there. Should have been Why does sudo ignore aliases?
â muru
Feb 8 at 5:17
add a comment |Â
4 Answers
4
active
oldest
votes
up vote
20
down vote
accepted
Aliases are a feature of the shell. Defining an alias creates a new shell command name. It's recognized only by the shell, and only when it appears as a command name.
For example, if you type
> ff
at a shell prompt, it will invoke your alias, but if you type
> echo ff
the ff
is just an argument, not a command. (At least in bash, you can play some tricks if the alias definition ends with a space. See Stéphane Chazelas's answer for a possible solution if you're determined to use shell aliases.)
You typed
> gdb ff
so the shell invoked gdb
, passing it the string ff
as an argument.
You can pass arguments to the debugged program via the gdb
command line, but you have to use the --args
option. For example:
> gdb firefox --safe-mode
tries (and fails) to treat --safe-mode
as an option to gdb
. To run the command with an argument, you can do it manually:
> gdb firefox
...
(gdb) run --safe-mode
or, as thrig's answer reminds me, you can use --args
:
> gdb --args firefox --safe-mode
...
(gdb) run
(The first argument following --args
is the command name; all remaining arguments are passed to the invoked command.)
It's possible to extract the arguments from a shell alias, but I'd recommend just defining a separate alias:
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'
Or, better, use shell functions, which are much more versatile. The bash manual says:
For almost every purpose, shell functions are preferred over aliases.
1
I think if you enteralias gdb='gdb '
the trailing blank will make the shell consider the next word as an alias.
â Mark Plotnick
Feb 8 at 1:34
@MarkPlotnick: Not in bash, and I'm not aware that any other shell has that behavior. gnu.org/software/bash/manual/html_node/Aliases.html
â Keith Thompson
Feb 8 at 3:32
6
Keith: from the second graf of that very page: "If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion." And the same from POSIX. Though in this case you needalias gdb='gdb --args '
.Shell functions are usually better in the shell, and for bash even in child shells modulo shellshock, but not other programs like gdb.
â dave_thompson_085
Feb 8 at 5:50
1
@dave_thompson_085: I stand corrected.
â Keith Thompson
Feb 8 at 6:57
1
I'd suggest editing the answer to remove the original assertion that "you can't pass arguments to the debugged program via thegdb
command line" - someone could easily read the first part of the answer, get to that bit, and then give up believing that what they want to do is impossible (without seeing the update that tells them that it is :-)
â psmears
Feb 8 at 14:58
 |Â
show 2 more comments
up vote
5
down vote
Not directly but it is possible with some wrangling of ZSH shell aliases into a form suitable for gdb
.
alias testtest='echo test test test'
function gdb-alias()
local cmdargs
cmdargs=( $(z)$aliases[$1] )
gdb -q --args $cmdargs
This splits the alias (more robust code would check whether the first argument is indeed an alias, or even is set, etc) as ZSH would and then feeds those arguments to gdb
via the handy --args
flag (see info gdb invocation
). If we then run gdb-alias testtest
% gdb-alias testtest
Reading symbols from echo...(no debugging symbols found)...done.
(gdb) r
Starting program: /Users/jhqdoe/usr/Darwin15.6.0-x86_64/bin/echo test test test
test test test
[Inferior 1 (process 93721) exited normally]
(gdb)
which shows that echo
(my assembly implementation of echo
, anyways) was run by gdb
with the arguments from the alias.
(This will probably break on global aliases, or any aliases with shell metacharacter foo, maybe, depending on whether gdb throws those argument through a shell compatible with anything that might be set in ZSH, but should be okay for simple x='y z'
type stuff. Maybe.)
add a comment |Â
up vote
4
down vote
In POSIX shells, aliases are only expanded in command position (wherever a command is expected) or after aliases whose expansion ends in a blank character (in zsh
, only a space, and in many other implementations, only space or tab)ù. You also need the --args
option to gdb
to be able to pass arguments to the program being debugged. So you can do:
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
ù zsh also supports global aliases (with alias -g
) which are expanded in many more places, but you probably wouldn't want to use such an alias for your firefox --safe-mode
here as you wouldn't want echo ff
for instance to output anything other than ff
.
add a comment |Â
up vote
1
down vote
You do not need aliases to try to get gdb
accepting arguments.
In your case, it would be:
gdb firefox
(gdb) set args --safe-mode
add a comment |Â
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
20
down vote
accepted
Aliases are a feature of the shell. Defining an alias creates a new shell command name. It's recognized only by the shell, and only when it appears as a command name.
For example, if you type
> ff
at a shell prompt, it will invoke your alias, but if you type
> echo ff
the ff
is just an argument, not a command. (At least in bash, you can play some tricks if the alias definition ends with a space. See Stéphane Chazelas's answer for a possible solution if you're determined to use shell aliases.)
You typed
> gdb ff
so the shell invoked gdb
, passing it the string ff
as an argument.
You can pass arguments to the debugged program via the gdb
command line, but you have to use the --args
option. For example:
> gdb firefox --safe-mode
tries (and fails) to treat --safe-mode
as an option to gdb
. To run the command with an argument, you can do it manually:
> gdb firefox
...
(gdb) run --safe-mode
or, as thrig's answer reminds me, you can use --args
:
> gdb --args firefox --safe-mode
...
(gdb) run
(The first argument following --args
is the command name; all remaining arguments are passed to the invoked command.)
It's possible to extract the arguments from a shell alias, but I'd recommend just defining a separate alias:
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'
Or, better, use shell functions, which are much more versatile. The bash manual says:
For almost every purpose, shell functions are preferred over aliases.
1
I think if you enteralias gdb='gdb '
the trailing blank will make the shell consider the next word as an alias.
â Mark Plotnick
Feb 8 at 1:34
@MarkPlotnick: Not in bash, and I'm not aware that any other shell has that behavior. gnu.org/software/bash/manual/html_node/Aliases.html
â Keith Thompson
Feb 8 at 3:32
6
Keith: from the second graf of that very page: "If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion." And the same from POSIX. Though in this case you needalias gdb='gdb --args '
.Shell functions are usually better in the shell, and for bash even in child shells modulo shellshock, but not other programs like gdb.
â dave_thompson_085
Feb 8 at 5:50
1
@dave_thompson_085: I stand corrected.
â Keith Thompson
Feb 8 at 6:57
1
I'd suggest editing the answer to remove the original assertion that "you can't pass arguments to the debugged program via thegdb
command line" - someone could easily read the first part of the answer, get to that bit, and then give up believing that what they want to do is impossible (without seeing the update that tells them that it is :-)
â psmears
Feb 8 at 14:58
 |Â
show 2 more comments
up vote
20
down vote
accepted
Aliases are a feature of the shell. Defining an alias creates a new shell command name. It's recognized only by the shell, and only when it appears as a command name.
For example, if you type
> ff
at a shell prompt, it will invoke your alias, but if you type
> echo ff
the ff
is just an argument, not a command. (At least in bash, you can play some tricks if the alias definition ends with a space. See Stéphane Chazelas's answer for a possible solution if you're determined to use shell aliases.)
You typed
> gdb ff
so the shell invoked gdb
, passing it the string ff
as an argument.
You can pass arguments to the debugged program via the gdb
command line, but you have to use the --args
option. For example:
> gdb firefox --safe-mode
tries (and fails) to treat --safe-mode
as an option to gdb
. To run the command with an argument, you can do it manually:
> gdb firefox
...
(gdb) run --safe-mode
or, as thrig's answer reminds me, you can use --args
:
> gdb --args firefox --safe-mode
...
(gdb) run
(The first argument following --args
is the command name; all remaining arguments are passed to the invoked command.)
It's possible to extract the arguments from a shell alias, but I'd recommend just defining a separate alias:
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'
Or, better, use shell functions, which are much more versatile. The bash manual says:
For almost every purpose, shell functions are preferred over aliases.
1
I think if you enteralias gdb='gdb '
the trailing blank will make the shell consider the next word as an alias.
â Mark Plotnick
Feb 8 at 1:34
@MarkPlotnick: Not in bash, and I'm not aware that any other shell has that behavior. gnu.org/software/bash/manual/html_node/Aliases.html
â Keith Thompson
Feb 8 at 3:32
6
Keith: from the second graf of that very page: "If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion." And the same from POSIX. Though in this case you needalias gdb='gdb --args '
.Shell functions are usually better in the shell, and for bash even in child shells modulo shellshock, but not other programs like gdb.
â dave_thompson_085
Feb 8 at 5:50
1
@dave_thompson_085: I stand corrected.
â Keith Thompson
Feb 8 at 6:57
1
I'd suggest editing the answer to remove the original assertion that "you can't pass arguments to the debugged program via thegdb
command line" - someone could easily read the first part of the answer, get to that bit, and then give up believing that what they want to do is impossible (without seeing the update that tells them that it is :-)
â psmears
Feb 8 at 14:58
 |Â
show 2 more comments
up vote
20
down vote
accepted
up vote
20
down vote
accepted
Aliases are a feature of the shell. Defining an alias creates a new shell command name. It's recognized only by the shell, and only when it appears as a command name.
For example, if you type
> ff
at a shell prompt, it will invoke your alias, but if you type
> echo ff
the ff
is just an argument, not a command. (At least in bash, you can play some tricks if the alias definition ends with a space. See Stéphane Chazelas's answer for a possible solution if you're determined to use shell aliases.)
You typed
> gdb ff
so the shell invoked gdb
, passing it the string ff
as an argument.
You can pass arguments to the debugged program via the gdb
command line, but you have to use the --args
option. For example:
> gdb firefox --safe-mode
tries (and fails) to treat --safe-mode
as an option to gdb
. To run the command with an argument, you can do it manually:
> gdb firefox
...
(gdb) run --safe-mode
or, as thrig's answer reminds me, you can use --args
:
> gdb --args firefox --safe-mode
...
(gdb) run
(The first argument following --args
is the command name; all remaining arguments are passed to the invoked command.)
It's possible to extract the arguments from a shell alias, but I'd recommend just defining a separate alias:
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'
Or, better, use shell functions, which are much more versatile. The bash manual says:
For almost every purpose, shell functions are preferred over aliases.
Aliases are a feature of the shell. Defining an alias creates a new shell command name. It's recognized only by the shell, and only when it appears as a command name.
For example, if you type
> ff
at a shell prompt, it will invoke your alias, but if you type
> echo ff
the ff
is just an argument, not a command. (At least in bash, you can play some tricks if the alias definition ends with a space. See Stéphane Chazelas's answer for a possible solution if you're determined to use shell aliases.)
You typed
> gdb ff
so the shell invoked gdb
, passing it the string ff
as an argument.
You can pass arguments to the debugged program via the gdb
command line, but you have to use the --args
option. For example:
> gdb firefox --safe-mode
tries (and fails) to treat --safe-mode
as an option to gdb
. To run the command with an argument, you can do it manually:
> gdb firefox
...
(gdb) run --safe-mode
or, as thrig's answer reminds me, you can use --args
:
> gdb --args firefox --safe-mode
...
(gdb) run
(The first argument following --args
is the command name; all remaining arguments are passed to the invoked command.)
It's possible to extract the arguments from a shell alias, but I'd recommend just defining a separate alias:
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'
Or, better, use shell functions, which are much more versatile. The bash manual says:
For almost every purpose, shell functions are preferred over aliases.
edited Feb 8 at 17:50
answered Feb 8 at 0:11
Keith Thompson
12.4k43137
12.4k43137
1
I think if you enteralias gdb='gdb '
the trailing blank will make the shell consider the next word as an alias.
â Mark Plotnick
Feb 8 at 1:34
@MarkPlotnick: Not in bash, and I'm not aware that any other shell has that behavior. gnu.org/software/bash/manual/html_node/Aliases.html
â Keith Thompson
Feb 8 at 3:32
6
Keith: from the second graf of that very page: "If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion." And the same from POSIX. Though in this case you needalias gdb='gdb --args '
.Shell functions are usually better in the shell, and for bash even in child shells modulo shellshock, but not other programs like gdb.
â dave_thompson_085
Feb 8 at 5:50
1
@dave_thompson_085: I stand corrected.
â Keith Thompson
Feb 8 at 6:57
1
I'd suggest editing the answer to remove the original assertion that "you can't pass arguments to the debugged program via thegdb
command line" - someone could easily read the first part of the answer, get to that bit, and then give up believing that what they want to do is impossible (without seeing the update that tells them that it is :-)
â psmears
Feb 8 at 14:58
 |Â
show 2 more comments
1
I think if you enteralias gdb='gdb '
the trailing blank will make the shell consider the next word as an alias.
â Mark Plotnick
Feb 8 at 1:34
@MarkPlotnick: Not in bash, and I'm not aware that any other shell has that behavior. gnu.org/software/bash/manual/html_node/Aliases.html
â Keith Thompson
Feb 8 at 3:32
6
Keith: from the second graf of that very page: "If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion." And the same from POSIX. Though in this case you needalias gdb='gdb --args '
.Shell functions are usually better in the shell, and for bash even in child shells modulo shellshock, but not other programs like gdb.
â dave_thompson_085
Feb 8 at 5:50
1
@dave_thompson_085: I stand corrected.
â Keith Thompson
Feb 8 at 6:57
1
I'd suggest editing the answer to remove the original assertion that "you can't pass arguments to the debugged program via thegdb
command line" - someone could easily read the first part of the answer, get to that bit, and then give up believing that what they want to do is impossible (without seeing the update that tells them that it is :-)
â psmears
Feb 8 at 14:58
1
1
I think if you enter
alias gdb='gdb '
the trailing blank will make the shell consider the next word as an alias.â Mark Plotnick
Feb 8 at 1:34
I think if you enter
alias gdb='gdb '
the trailing blank will make the shell consider the next word as an alias.â Mark Plotnick
Feb 8 at 1:34
@MarkPlotnick: Not in bash, and I'm not aware that any other shell has that behavior. gnu.org/software/bash/manual/html_node/Aliases.html
â Keith Thompson
Feb 8 at 3:32
@MarkPlotnick: Not in bash, and I'm not aware that any other shell has that behavior. gnu.org/software/bash/manual/html_node/Aliases.html
â Keith Thompson
Feb 8 at 3:32
6
6
Keith: from the second graf of that very page: "If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion." And the same from POSIX. Though in this case you need
alias gdb='gdb --args '
.Shell functions are usually better in the shell, and for bash even in child shells modulo shellshock, but not other programs like gdb.â dave_thompson_085
Feb 8 at 5:50
Keith: from the second graf of that very page: "If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion." And the same from POSIX. Though in this case you need
alias gdb='gdb --args '
.Shell functions are usually better in the shell, and for bash even in child shells modulo shellshock, but not other programs like gdb.â dave_thompson_085
Feb 8 at 5:50
1
1
@dave_thompson_085: I stand corrected.
â Keith Thompson
Feb 8 at 6:57
@dave_thompson_085: I stand corrected.
â Keith Thompson
Feb 8 at 6:57
1
1
I'd suggest editing the answer to remove the original assertion that "you can't pass arguments to the debugged program via the
gdb
command line" - someone could easily read the first part of the answer, get to that bit, and then give up believing that what they want to do is impossible (without seeing the update that tells them that it is :-)â psmears
Feb 8 at 14:58
I'd suggest editing the answer to remove the original assertion that "you can't pass arguments to the debugged program via the
gdb
command line" - someone could easily read the first part of the answer, get to that bit, and then give up believing that what they want to do is impossible (without seeing the update that tells them that it is :-)â psmears
Feb 8 at 14:58
 |Â
show 2 more comments
up vote
5
down vote
Not directly but it is possible with some wrangling of ZSH shell aliases into a form suitable for gdb
.
alias testtest='echo test test test'
function gdb-alias()
local cmdargs
cmdargs=( $(z)$aliases[$1] )
gdb -q --args $cmdargs
This splits the alias (more robust code would check whether the first argument is indeed an alias, or even is set, etc) as ZSH would and then feeds those arguments to gdb
via the handy --args
flag (see info gdb invocation
). If we then run gdb-alias testtest
% gdb-alias testtest
Reading symbols from echo...(no debugging symbols found)...done.
(gdb) r
Starting program: /Users/jhqdoe/usr/Darwin15.6.0-x86_64/bin/echo test test test
test test test
[Inferior 1 (process 93721) exited normally]
(gdb)
which shows that echo
(my assembly implementation of echo
, anyways) was run by gdb
with the arguments from the alias.
(This will probably break on global aliases, or any aliases with shell metacharacter foo, maybe, depending on whether gdb throws those argument through a shell compatible with anything that might be set in ZSH, but should be okay for simple x='y z'
type stuff. Maybe.)
add a comment |Â
up vote
5
down vote
Not directly but it is possible with some wrangling of ZSH shell aliases into a form suitable for gdb
.
alias testtest='echo test test test'
function gdb-alias()
local cmdargs
cmdargs=( $(z)$aliases[$1] )
gdb -q --args $cmdargs
This splits the alias (more robust code would check whether the first argument is indeed an alias, or even is set, etc) as ZSH would and then feeds those arguments to gdb
via the handy --args
flag (see info gdb invocation
). If we then run gdb-alias testtest
% gdb-alias testtest
Reading symbols from echo...(no debugging symbols found)...done.
(gdb) r
Starting program: /Users/jhqdoe/usr/Darwin15.6.0-x86_64/bin/echo test test test
test test test
[Inferior 1 (process 93721) exited normally]
(gdb)
which shows that echo
(my assembly implementation of echo
, anyways) was run by gdb
with the arguments from the alias.
(This will probably break on global aliases, or any aliases with shell metacharacter foo, maybe, depending on whether gdb throws those argument through a shell compatible with anything that might be set in ZSH, but should be okay for simple x='y z'
type stuff. Maybe.)
add a comment |Â
up vote
5
down vote
up vote
5
down vote
Not directly but it is possible with some wrangling of ZSH shell aliases into a form suitable for gdb
.
alias testtest='echo test test test'
function gdb-alias()
local cmdargs
cmdargs=( $(z)$aliases[$1] )
gdb -q --args $cmdargs
This splits the alias (more robust code would check whether the first argument is indeed an alias, or even is set, etc) as ZSH would and then feeds those arguments to gdb
via the handy --args
flag (see info gdb invocation
). If we then run gdb-alias testtest
% gdb-alias testtest
Reading symbols from echo...(no debugging symbols found)...done.
(gdb) r
Starting program: /Users/jhqdoe/usr/Darwin15.6.0-x86_64/bin/echo test test test
test test test
[Inferior 1 (process 93721) exited normally]
(gdb)
which shows that echo
(my assembly implementation of echo
, anyways) was run by gdb
with the arguments from the alias.
(This will probably break on global aliases, or any aliases with shell metacharacter foo, maybe, depending on whether gdb throws those argument through a shell compatible with anything that might be set in ZSH, but should be okay for simple x='y z'
type stuff. Maybe.)
Not directly but it is possible with some wrangling of ZSH shell aliases into a form suitable for gdb
.
alias testtest='echo test test test'
function gdb-alias()
local cmdargs
cmdargs=( $(z)$aliases[$1] )
gdb -q --args $cmdargs
This splits the alias (more robust code would check whether the first argument is indeed an alias, or even is set, etc) as ZSH would and then feeds those arguments to gdb
via the handy --args
flag (see info gdb invocation
). If we then run gdb-alias testtest
% gdb-alias testtest
Reading symbols from echo...(no debugging symbols found)...done.
(gdb) r
Starting program: /Users/jhqdoe/usr/Darwin15.6.0-x86_64/bin/echo test test test
test test test
[Inferior 1 (process 93721) exited normally]
(gdb)
which shows that echo
(my assembly implementation of echo
, anyways) was run by gdb
with the arguments from the alias.
(This will probably break on global aliases, or any aliases with shell metacharacter foo, maybe, depending on whether gdb throws those argument through a shell compatible with anything that might be set in ZSH, but should be okay for simple x='y z'
type stuff. Maybe.)
answered Feb 8 at 2:43
thrig
22.3k12852
22.3k12852
add a comment |Â
add a comment |Â
up vote
4
down vote
In POSIX shells, aliases are only expanded in command position (wherever a command is expected) or after aliases whose expansion ends in a blank character (in zsh
, only a space, and in many other implementations, only space or tab)ù. You also need the --args
option to gdb
to be able to pass arguments to the program being debugged. So you can do:
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
ù zsh also supports global aliases (with alias -g
) which are expanded in many more places, but you probably wouldn't want to use such an alias for your firefox --safe-mode
here as you wouldn't want echo ff
for instance to output anything other than ff
.
add a comment |Â
up vote
4
down vote
In POSIX shells, aliases are only expanded in command position (wherever a command is expected) or after aliases whose expansion ends in a blank character (in zsh
, only a space, and in many other implementations, only space or tab)ù. You also need the --args
option to gdb
to be able to pass arguments to the program being debugged. So you can do:
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
ù zsh also supports global aliases (with alias -g
) which are expanded in many more places, but you probably wouldn't want to use such an alias for your firefox --safe-mode
here as you wouldn't want echo ff
for instance to output anything other than ff
.
add a comment |Â
up vote
4
down vote
up vote
4
down vote
In POSIX shells, aliases are only expanded in command position (wherever a command is expected) or after aliases whose expansion ends in a blank character (in zsh
, only a space, and in many other implementations, only space or tab)ù. You also need the --args
option to gdb
to be able to pass arguments to the program being debugged. So you can do:
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
ù zsh also supports global aliases (with alias -g
) which are expanded in many more places, but you probably wouldn't want to use such an alias for your firefox --safe-mode
here as you wouldn't want echo ff
for instance to output anything other than ff
.
In POSIX shells, aliases are only expanded in command position (wherever a command is expected) or after aliases whose expansion ends in a blank character (in zsh
, only a space, and in many other implementations, only space or tab)ù. You also need the --args
option to gdb
to be able to pass arguments to the program being debugged. So you can do:
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
ù zsh also supports global aliases (with alias -g
) which are expanded in many more places, but you probably wouldn't want to use such an alias for your firefox --safe-mode
here as you wouldn't want echo ff
for instance to output anything other than ff
.
edited Feb 8 at 11:46
answered Feb 8 at 11:38
Stéphane Chazelas
281k53516847
281k53516847
add a comment |Â
add a comment |Â
up vote
1
down vote
You do not need aliases to try to get gdb
accepting arguments.
In your case, it would be:
gdb firefox
(gdb) set args --safe-mode
add a comment |Â
up vote
1
down vote
You do not need aliases to try to get gdb
accepting arguments.
In your case, it would be:
gdb firefox
(gdb) set args --safe-mode
add a comment |Â
up vote
1
down vote
up vote
1
down vote
You do not need aliases to try to get gdb
accepting arguments.
In your case, it would be:
gdb firefox
(gdb) set args --safe-mode
You do not need aliases to try to get gdb
accepting arguments.
In your case, it would be:
gdb firefox
(gdb) set args --safe-mode
answered Feb 8 at 11:31
Rui F Ribeiro
35k1269113
35k1269113
add a comment |Â
add a comment |Â
Maybe use
gdb zsh -c ff
instead.â Isaac
Feb 8 at 0:07
5
gdb isnâÂÂt a shell
â Jeff Schaller
Feb 8 at 0:09
Oh, looks like I copied the wrong URL there. Should have been Why does sudo ignore aliases?
â muru
Feb 8 at 5:17