[gdb] Bash 스크립트 내에서 GDB를 사용하여 명령 줄 인수가있는 프로그램을 어떻게 실행합니까?

GDB에서 프로그램을 실행할 때 일반적으로 프로그램의 인수는 run명령에 제공됩니다. GDB를 사용하여 프로그램을 실행하고 쉘 스크립트 내에서 인수를 제공하는 방법이 있습니까?

스크립트가 실행을 시작한 후 프로그램에 GDB를 첨부 할 수 있다고 언급하면서 관련 질문에 대한 답변을 보았습니다. 그러나 나는 프로그램을 ‘기다려야한다’.

다른 방법이 있습니까?



답변

–args 매개 변수를 사용하여 gdb를 실행할 수 있습니다.

gdb --args executablename arg1 arg2 arg3

자동으로 실행하려면 일부 명령 (예 : ‘run’)을 파일에 넣고 -x / tmp / cmds 인수로 지정하십시오. 선택적으로 -batch 모드로 실행할 수 있습니다.

gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3


답변

gdb -ex=r --args myprogram arg1 arg2

-ex=r에 대한 짧은 -ex=run하고 프롬프트에서 “실행”을 입력하는 대신 대기보다, 즉시 프로그램을 실행 gdb를 알려줍니다. 그런 다음 --args뒤에 나오는 모든 것이 명령 줄 프롬프트에서 일반적으로 입력하는 것처럼 명령과 인수라고 말합니다.


답변

개인적으로 --args매개 변수 를 기억할 필요없이 약간 더 편리하고 직관적으로 찾을 수있는 또 다른 방법 은 정상적으로 컴파일하고 다음과 같이 r arg1 arg2 arg3안에서 직접 사용 하는 것입니다 gdb.

$ gcc -g *.c *.h
$ gdb ./a.out
(gdb) r arg1 arg2 arg3


답변

컨텍스트가있는 파일을 작성할 수 있습니다.

run arg1 arg2 arg3 etc

program input

그리고 gdb를 다음과 같이 호출하십시오.

gdb prog < file


답변

gdb에는 --init-command <somefile>somefile에 실행할 gdb 명령 목록이 있으며,이를 사용하여 //GDB코드에 주석을 달고`

echo "file ./a.out" > run
grep -nrIH "//GDB"|
    sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
    awk '{print "b" " " $1}'|
    grep -v $(echo $0|sed "s/.*\///g") >> run
gdb --init-command ./run -ex=r

스크립트로, 디버그 기호를로드하는 명령을 넣은 다음, 각 //GDB주석에 대한 중단 점을 설정하기위한 중단 명령 목록을 생성 하고 실행을 시작합니다.


답변

--args매개 변수가 시스템에서 작동하지 않는 경우 (예 : Solaris 8) 다음과 같이 gdb를 시작할 수 있습니다.

gdb -ex "set args <arg 1> <arg 2> ... <arg n>"

그리고 이것을 stdin에 파일을 입력하고 “즉시 실행”하는 것과 결합 할 수 있습니다.

gdb -ex "set args <arg 1> <arg 2> ... <arg n> < <input file>" -ex "r"


답변

Hugo Ideler의 답변 외에도. 접두어가 --or 또는 같은 인수를 사용할 때 -gdb와 충돌하지는 않았습니다.

gdb는 args옵션을 프로그램의 인수로 사용합니다.

처음에 나는 확신하기를 원했고, 인수 주위에 따옴표로 gdb를 실행했으며 시작시 제거되었습니다.

이것도 작동하지만 선택 사항입니다.

gdb --args executablename "--arg1" "--arg2" "--arg3"

작동하지 않습니다.

gdb --args executablename "--arg1" "--arg2" "--arg3" -tui

이 경우 -tuigdb가 아닌 내 프로그램 매개 변수로 사용됩니다.