Я встречаю ту же проблему.Я нахожу, что в inferior.h (исходный код gdb gdb / inferior.h ) есть макрос STARTUP_WITH_SHELL
, также есть фрагмент комментария как
/* If STARTUP_WITH_SHELL is set, GDB's "run"
will attempts to start up the debugee under a shell.
This is in order for argument-expansion to occur. E.g.,
(gdb) run *
The "*" gets expanded by the shell into a list of files.
While this is a nice feature, it turns out to interact badly
with some of the catch-fork/catch-exec features we have added.
In particular, if the shell does any fork/exec's before
the exec of the target program, that can confuse GDB.
To disable this feature, set STARTUP_WITH_SHELL to 0.
To enable this feature, set STARTUP_WITH_SHELL to 1.
The catch-exec traps expected during start-up will
be 1 if target is not started up with a shell, 2 if it is.
- RT
If you disable this, you need to decrement
START_INFERIOR_TRAPS_EXPECTED in tm.h. */
#define STARTUP_WITH_SHELL 1
#if !defined(START_INFERIOR_TRAPS_EXPECTED)
#define START_INFERIOR_TRAPS_EXPECTED 2
#endif
ТогдаЯ установил STARTUP_WITH_SHELL
в 0 и уменьшил START_INFERIOR_TRAPS_EXPECTED
и перекомпилировал мой GDB.После этого GDB больше не запускался из оболочки.