인수를 사용하여 실행 파일을 디버깅할 때 다음 시퀀스를 실행 합니다 program
.arg1 arg2
gdb
gdb
file ./program
run arg1 arg2
bt
quit
쉘 스크립트의 명령줄에서 동일한 작업을 어떻게 수행할 수 있습니까?
답변1
명령줄에서 옵션을 사용하여 명령을 gdb에 전달할 수 있습니다 -ex
. 각 명령마다 이 작업을 반복해야 합니다. 이는 프로그램이 표준 입력을 리디렉션하지 않고 읽어야 할 때 유용합니다. 예를 들어,od -c
echo abc |
gdb -ex 'break main' -ex 'run -c' -ex bt -ex cont -ex quit od
따라서 특히 문제에 대해 다음을 사용할 수 있습니다.
gdb -ex 'run arg1 arg2' -ex bt -ex quit ./program
답변2
표준 입력을 통해 명령을 입력할 수 있습니다.
#!/bin/sh
exec gdb -q <<EOF
file ./program
run arg1 arg2
bt
quit
EOF
또는 명령을 입력 afile
하고 gdb
run 을 사용할 수 있습니다 gdb -batch -x afile
. 또는 멋진 쉘 개행(및 코더 유지 관리)을 사용하는 것을 싫어하는 경우 모든 작업을 한 줄로 수행할 수 있습니다(heredoc 버전을 표현하는 다른 방법).
gdb -q <<< "file ./program"$'\n'run$'\n'...
답변3
GDB 명령줄에서 프로그램에 인수를 전달하려면 gdb --args
.
gdb --args ./program arg1 arg2
bt