У меня есть скрипт, который запускает сервер, затем группу клиентов, затем мне нужно вернуть сервер на передний план, чтобы я мог что-то протестировать. По какой-то причине сервер быстро завершает работу, как будто по какому-то сигналу, поэтому я хотел проверить его с помощью gdb.
Проблема в том, что при выполнении команды run
предопределенный gdb отсоединяется. Вот простой пример sh
(--nh
для gdb игнорировать конфигурацию) :
$ cat test.sh
#!/bin/sh -m
gdb --nh -q /bin/test &
sleep 1
fg
$ ./test.sh
Reading symbols from /bin/test...(no debugging symbols found)...done.
gdb --nh -q /bin/test
(gdb) r
Starting program: /usr/bin/test
$ ps aux | grep gdb
constan+ 11418 1.5 0.3 104928 28200 pts/1 Tl 16:52 0:00 gdb --nh -q /bin/test
constan+ 11470 0.0 0.0 12100 2452 pts/1 S+ 16:52 0:00 grep gdb
Как видите, он отсоединился от оболочки и висит там в списке процессов.
С zsh
и bash
Я также часто получаю следующие ошибки:
[setting tty state failed in terminal_inferior: Input/output error]
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
… и GDB не появляется в списке процессов. Но иногда (не очень часто) поведение в zsh
и bash
такое же, как и в sh
, то есть ошибок нет, и gdb отсоединяется.
В целом, что происходит с GDB?