백그라운드에서 GDB 실행

백그라운드에서 GDB 실행

나는 2개의 ncurses 창이 있는 프로그램을 작업 중입니다. 하나는 fork+exec를 사용하여 구현된 사용자 정의 셸을 보여주고 다른 하나는 내 셸에서 실행되는 명령에 대한 일부 정보를 표시하고 싶습니다. 이를 위해 GDB를 사용해 보았습니다.

내 생각은 백그라운드에서 GDB를 실행하고 몇 가지 중단점을 설정하고 일부 정보를 내 ncurses 응용 프로그램이 읽고 형식화하고 표시하는 파일에 인쇄하는 것입니다.

문제는 입력이 터미널에서 나오지 않으면 자동으로 종료되기 때문에 프롬프트 없이 GDB를 실행할 수 없다는 것입니다. 다음 스크립트를 사용하고 있습니다.

./bin/pE_application &
pid=$(ps -C pE_application -o pid=)
gdb --command=examine_memory.gdb --pid="$pid" > "$GDB_TMP" 2>&1 &
pE_jid=$(jobs | grep pE_application | grep -oE "^\[[0-9]\]" | sed 's/\[//g' | sed 's/\]//g')
fg "%""$pE_jid"

여기서 pE_application은 내 ncurses 애플리케이션입니다. Exam_Memory.gdb는 시작 시 정보를 덤프할 수 있도록 run_shell 함수에 중단점을 설정하려고 시도하는 시작 스크립트입니다.

set follow-fork-mode parent

info functions

break run_shell
        command 1
        p 'pE_application.c'::unparsed_cmd
        continue
end

배치 모드를 사용해 보았지만 init 스크립트가 실행된 후에 GDB가 종료됩니다. 배치 모드가 없으면 출력이 터미널에서 나오지 않고 출력 파일이 다음과 같기 때문에 GDB가 종료됩니다.

*some info*
...
Quit anyway? (y or n) [answered Y; input not from terminal]

또는 tty 중지 신호로 인해 실행할 수 없습니다. 중단점과 명령을 사용하여 시작 스크립트를 유지하는 것만으로도 I/O 없이 백그라운드에서 GDB를 실행할 수 있는 방법이 있는지 알아보려고 합니다.

감사해요

관련 정보