Nei*_*aft 45 gcc gdb llvm clang lldb
(前言:我对C/C++很陌生,我真的不知道本机代码的调试实际上是如何工作的.)
一些消息来源说gdb和lldb可以调试任何编译成机器代码的程序.其他人说要使用gdb进行调试,你必须使用-g
标志在gcc中编译.gcc本身的文档表明这是可选的,实际上如果你使用它,它可能会导致gdb 以外的调试器出现问题.Clang还有一个-g
标志,文档基本上只是说"生成调试信息".
那么这些调试器是否仅限于它们自己的工具链(GNU和LLVM),还是它们在某种程度上独立于所使用的编译器?
Oak*_*Oak 40
从理论上讲,您应该能够使用lldb调试GCC构建的程序,并使用gdb调试LLVM构建的程序.在这两种情况下你都应该用-g
.
这是因为两个编译器都以相同的格式生成目标文件(例如,在Linux上,两者都将生成带有DWARF调试信息的ELF文件),并且两个调试器都知道如何解析该格式.
实际上,两个编译器都会将一些数据推送到调试信息中,只有各自的调试器才知道如何使用.然而:
-gdwarf-2
over -g
应该只生成符合标准的DWARF.请注意,您也可以在没有调试信息的情况下调试程序(未编译-g
),但您将仅限于调试器中的低级信息 - 汇编代码,内存和寄存器 - 并且无法查看高级结构,例如行号,函数名,变量名及其内容之间的映射等.