gpt4 book ai didi

gcc - 是否可以使用 lldb 调试 gcc 编译的程序,或使用 gdb 调试 clang 编译的程序?

转载 作者:行者123 更新时间:2023-12-02 07:37:29 50 4
gpt4 key购买 nike

(前言:我对 C/C++ 还很陌生,我真的不知道 native 代码中的调试实际上是如何工作的。)

一些消息来源说 gdb 和 lldb 可以调试 any program compiled to machine code 。其他人说要使用 gdb 进行调试,您必须在 gcc 中编译 with the -g flag 。 gcc 本身的文档表明这是可选的,事实上,如果您使用它,它可能会给除 gdb 之外的调试器带来问题。 Clang 还有一个 -g 标志,文档基本上只是说“生成调试信息”。

那么这些调试器是否仅限于它们自己的工具链(GNU 和 LLVM),或者它们在某种程度上独立于所使用的编译器?

最佳答案

理论上,您应该能够使用 lldb 调试 GCC 构建的程序,并使用 gdb 调试 LLVM 构建的程序。在这两种情况下,您都应该使用 -g 进行编译。

这是因为两个编译器都以相同的格式生成目标文件(例如,在 Linux 上,两者都会生成带有 ELF 调试信息的 DWARF 文件),并且两个调试器都知道如何解析该格式。

实际上,两个编译器都会将一些数据推送到调试信息中,只有各自的调试器知道如何使用这些数据。但是:

  1. LLVM 生成的数据不应以任何方式妨碍 gdb。
  2. GCC 生成的数据不应妨碍 lldb,但如果确实如此,您可以特别 ask gcc to not add non-standard data 。例如,在 Linux 上,使用 -gdwarf-2 而不是 -g 只能生成符合标准的 DWARF。

请注意,您也可以在没有调试信息的情况下调试程序(不是使用 -g 编译的),但您将仅限于调试器中的低级信息 - 汇编代码、内存和寄存器 -并且将无法看到高级结构,例如行号、函数名称、变量名称及其内容之间的映射等。

关于gcc - 是否可以使用 lldb 调试 gcc 编译的程序,或使用 gdb 调试 clang 编译的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21132194/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com