gdb가 별칭을 좋아하지 않는 이유 [중복]

gdb가 별칭을 좋아하지 않는 이유 [중복]

별칭을 만들고 ff에서 소스를 가져왔습니다 ~/.zsh/aliases.zsh.

별칭 자체는 잘 작동합니다.

alias ff
ff='firefox --safe-mode'

예상대로 작동합니다.

그러나 아래에서 실행하려고 하면 다음과 같은 결과 gdb가 나타납니다.

> 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실행되지 않습니다.

누구든지 문제가 무엇인지 알아낼 수 있습니까?

답변1

별칭은 쉘의 기능입니다. 별칭을 정의하면 새로운 쉘 명령 이름이 생성됩니다. 이는 쉘에서만 인식되며, 명령 이름으로 나타나는 경우에만 인식됩니다.

예를 들어 다음을 입력하면

> ff

쉘 프롬프트에서 별칭을 호출하지만 다음을 입력하면

> echo ff

이는 ff명령이 아닌 매개변수일 뿐입니다. (적어도 bash에서는 별칭 정의가 공백으로 끝나는 경우 몇 가지 트릭을 사용할 수 있습니다.Stefan Chazeras의 답변셸 별칭을 사용하기로 결정한 경우 가능한 해결 방법을 참조하세요. )

당신은 입력

> gdb ff

따라서 쉘은 문자열을 인수로 전달하여 gdb호출 됩니다.ff

명령줄을 통해 디버깅 중인 프로그램에 인수를 전달할 수 있지만 gdb이 옵션을 사용해야 합니다 --args. 예를 들어:

> gdb firefox --safe-mode

인수를 사용하여 명령을 실행 하려면 수동 --safe-mode으로 gdb수행할 수 있습니다.

> gdb firefox
...
(gdb) run --safe-mode

또는 다음과 같이트리거의 답변다음을 사용할 수 있음을 상기시켜주세요 --args.

> gdb --args firefox --safe-mode
...
(gdb) run

(다음 첫 번째 인수 --args는 명령 이름입니다. 나머지 인수는 모두 호출된 명령에 전달됩니다.)

셸 별칭에서 매개변수를 추출하는 것이 가능하지만 별도의 별칭을 정의하는 것이 좋습니다.

alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'

또는 더 다양한 기능을 제공하는 쉘 기능을 사용하는 것이 더 좋습니다. Bash 매뉴얼은 다음과 같이 말합니다:

거의 모든 목적에서 셸 함수는 별칭보다 우수합니다.

답변2

직접적으로는 아니지만 ZSH 셸 별칭을 gdb.

alias testtest='echo test test test'

function gdb-alias() {
   local cmdargs
   cmdargs=( ${(z)${aliases[$1]}} )
   gdb -q --args $cmdargs
}

이는 ZSH처럼 별칭을 분할한 다음(보다 강력한 코드에서는 첫 번째 인수가 실제로 별칭인지 또는 설정인지 등을 확인합니다) gdb편의 플래그를 통해 --args해당 인수를 제공합니다 (참고자료 참조 info gdb invocation). 그런 다음 실행하면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) 

이는 echo(내 어셈블리 구현echo, 무슨 일이 있어도) gdb별칭의 매개 변수를 통해 실행됩니다.

(이것은 전역 별칭이나 쉘 메타 문자 foo가 있는 별칭에서 깨질 수 있습니다. gdb가 ZSH에 설정된 것과 호환되는 쉘을 통해 이러한 인수를 던지는지 여부에 따라 달라질 수 있지만 간단한 x='y z'유형의 경우에는 문제가 없습니다.)

답변3

POSIX 셸에서 별칭은 명령 위치(명령이 필요한 곳)에서만 확장되거나 공백 문자로 끝나는 별칭( zsh다른 많은 구현에서는 공백이나 탭만)을 확장한 후에만 확장됩니다. 디버깅 중인 프로그램에 매개변수를 전달할 수 있는 옵션도 필요합니다 --args. gdb그래서 당신은 이것을 할 수 있습니다 :

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도 지원글로벌별칭( 포함 )은 더 많은 곳으로 확장되지만 . 이외의 항목을 출력 하고 싶지 않기 때문에 여기서는 그러한 별칭을 사용하고 alias -g싶지 않을 것입니다 .firefox --safe-modeecho ffff

답변4

허용되는 매개변수를 가져오려면 별칭이 필요하지 않습니다 gdb.

귀하의 경우에는 다음과 같습니다:

gdb firefox
(gdb) set args --safe-mode

관련 정보