代码之家  ›  专栏  ›  技术社区  ›  Navaneeth K N

使用gdb调试-最佳实践

  •  6
  • Navaneeth K N  · 技术社区  · 16 年前

    我是GDB的初学者,并且我能正确地工作。不过,我想知道这在大型项目中是如何使用的。我有一个使用makefile和g++完成构建的项目。要使gdb工作,我们需要使用调试符号编译,对吗(g++-g文件)?

    问题

    1. 我是否需要在makefile中创建一个类似“debug”的新目标,以便我可以像 进行调试 . 这是最佳实践吗?
    2. 假设,我只需要调试foo.cpp,是否可以只为它生成调试符号,而不构建包括main在内的整个程序?

    有什么想法吗?

    5 回复  |  直到 15 年前
        1
  •  2
  •   Mikeage    16 年前
    1. 不需要,尽管您可能会考虑始终使用-g构建(有时甚至可能需要尝试调试优化的(-o1、-o2等)代码;为什么不保留-g?对于发行版,您总是可以在二进制文件上运行strip。

    2. 对。用-g构建这个文件。

        2
  •  2
  •   Eugene Bujak    16 年前

    在我工作的大型项目中,我们总是使用尽可能详细的调试信息进行构建(例如,对于本机gdb格式为“-ggdb3”,对于gdb中的宏访问为“-gdwarf-2-g3”)。

    完成调试后,只需使用“strip”命令从二进制文件中除去所有调试信息。

    gcc -ggdb3 blah.c -o blah
    strip blah
    
        3
  •  1
  •   user96147    16 年前

    我认为gdb在大项目、中项目或小项目中的使用没有很大的区别。但是,对于大型项目,必须考虑生成所需的空间量,因为调试信息会增加对象和可执行文件的大小。

    1. 如果您最初低估了对整个解决方案的调试需求,那么将来您的决定可能会使您蒙受损失。当构建可以使用或不使用调试信息来完成时,总是很好的,因此请仔细编写构建脚本。
    2. 是的,但考虑一下我以前的回答。有时问题可能来自没有调试信息的模块。
        4
  •  0
  •   user61405    16 年前

    gdb将在没有符号的情况下工作;只是输出的用处要小得多。

    1. 这是一个偏好问题。默认情况下,我在调试模式下构建所有内容,然后 使释放 必要时。
    2. 对。
        5
  •  0
  •   RandomNickName42    15 年前

    您可以将调试版本保存在某个地方,如果需要重新绑定符号信息,在调试剥离/发布版本之后,您可以转到“文件/路径”,gdb将重新读取该目标的符号。还可以使用“符号文件/路径”配置要绑定到剥离文件的符号信息。