我有一个启动服务器的脚本,然后是一堆客户端,然后我需要将服务器置于前台,这样我就可以测试一些东西。出于某种原因,服务器很快就退出了,就好像根据某些信号一样,所以我想用 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
与 with 相同sh
,即没有错误,并且 gdb 被分离。
总而言之,gdb是怎么回事?