1

我有一个启动服务器的脚本,然后是一堆客户端,然后我需要将服务器置于前台,这样我就可以测试一些东西。出于某种原因,服务器很快就退出了,就好像根据某些信号一样,所以我想用 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

您可以看到,它与外壳分离,并挂在进程列表中。

zshbash经常遇到以下错误:

[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是怎么回事?

4

0 回答 0