为什么 gdb 会抛出内部错误并告诉我存在错误?

Mat*_*ell 4 c gdb

我正在尝试调试一个简单的程序,但 gdb 正在运行。我收到内部错误,然后 gdb 说有一个错误。当我尝试停止正在运行的程序时会发生这种情况。发送键盘中断返回调试器后,我尝试使用quit. 但是当我这样做时,我得到了这个(我还包括在我完成问题时会发生什么):

A debugging session is active.

    Inferior 1 [process 1239] will be killed.

Quit anyway? (y or n) y
../../gdb/target.c:2149: internal-error: void target_mourn_inferior(ptid_t): Assertion `ptid == inferior_ptid' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) y

This is a bug, please report it.  For instructions, see:
<https://www.gnu.org/software/gdb/bugs/>.

../../gdb/target.c:2149: internal-error: void target_mourn_inferior(ptid_t): Assertion `ptid == inferior_ptid' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Create a core file of GDB? (y or n) y
Abort trap: 6 (core dumped)
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我发生了什么,为什么会发生,以及如何解决?

Joh*_*ger 5

有人能告诉我发生了什么吗

GDB已经告诉你:

This is a bug, please report it.  For instructions, see:
<https://www.gnu.org/software/gdb/bugs/>.
Run Code Online (Sandbox Code Playgroud)

如果一个程序曾经报告它本身有一个错误,那么它总是正确的。即使它认为有问题的行为实际上不是,那么程序也有问题。

在这种特殊情况下,GDB 在自己的代码中报告断言失败。这绝对是一个实现错误,而不是一个错误报告错误。

为什么会发生

它可能是由正在调试的程序的异常触发的——它本身可能有问题——但这并不能使它成为 GDB 的错误。

以及如何修复它?

您不太可能自己修复 gdb 错误,但可能有您可以升级到的较新版本,其中该错误已得到修复。