【问题标题】:C++: Do I need GCC and GDB with the same version to debugC++:我需要相同版本的 GCC 和 GDB 来调试吗
【发布时间】:2023-03-14 14:03:01
【问题描述】:

我正在使用 minGW 在 Windows 上使用 C++ 进行开发。我目前有调试问题。

我必须使用旧版本的 GCC (4.4)。 所以我只是想知道是否可以使用这个旧的 GCC 进行编译并使用新的 GDB 进行调试?

他们两者之间的联系是什么?

(任何有关调试器崩溃的指针也将不胜感激! 我只知道我需要确保使用调试 DLL)

【问题讨论】:

  • 为什么要在一个和另一个之间有一个链接?你的调试问题是什么?您所说的调试 dll 是指哪个 dll。你不需要在任何地方都有调试符号,调试起来会更难......
  • 实际上在最后一个 minGW 版本中使用 GDB 进行了尝试,它可以正常工作。我只是想了解它们之间的联系。关于调试 DLL,我认为必须在调试中使用它们。我正在自己学习所有东西......而且还有很多东西要学。所以现在我需要看看“调试符号”!感谢您的帮助。
  • 唯一的链接是调试器信息的格式,它是标准化的,因此新的 gdb 附带了对以前版本的附加功能/特性/错误修复。话虽如此,它们是两个几乎像 vim 和 emacs 一样的不同程序,以便相互理解它们都需要使用相同的标准,但它们是独立的(在文本编辑程序中,标准是 UTF 或其他编码,在编译器中是调试器信息格式对于 gcc,它的侏儒 afaik)。
  • 感谢您提供有关 GDB 内部行为的详细信息。我认为调试信息没有标准格式。我不后悔发布这个问题!

标签: c++ debugging gcc gdb


【解决方案1】:

GDB 和 GCC 是独立的程序——独立的源代码库(有一些共享代码,虽然不多),通常是独立的维护者、不同的发布时间表和不同的版本号。他们确实有一些共同的文化,当然也有一些协调。

GDB 在向后兼容性方面相当不错。它甚至为旧版本的 GCC 和有时其他编译器发出的 debuginfo 中的错误保留了解决方法。这意味着您通常可以升级 GDB,同时保持相同的 GCC 版本。

不过,情况并非总是如此。有时,新版本的 GCC 会发出旧 GDB 无法理解的调试信息。在这种情况下,您还必须升级 GDB。在某些有限的情况下,您可以将兼容性标志传递给 GCC 以询问降级的调试信息,但这并不总是可行的。而且,既然升级 GDB 很简单,你也可以。

【讨论】:

  • 感谢您的一般回答。我对这些程序之间的“联系”有了更好的理解。很高兴知道 GDB 试图保持向后兼容性。在这一点上,我不需要坚持旧的 GDB 版本。所以希望我不会遇到你的最后一点。
【解决方案2】:

GCC 和 gdb 的版本不是必须的。您可以使用您手中的 gdb 版本调试您的可执行文件。 gdb a.out

【讨论】:

  • 在此期间尝试过,它有效! (实际上我通过 IDE 使用 GDB)。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 2019-08-25
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多