我是GDB的初学者并且已经成功使用了它。然而,我想知道在大型项目中如何使用它。我的一个项目是使用makefile和g++进行构建的。为了让GDB工作,我们需要开启调试符号,对吗(g++ -g files)?
问题
- 我是否需要在makefile中创建一个新的目标,例如“debug”,以便我可以像make debug这样制作调试版本。这是最佳实践吗?
- 假设我只需要调试foo.cpp,是否可能仅为其生成调试符号,而不是构建包括main在内的整个程序?
有什么想法吗?
不是必须的,但你可以考虑总是使用 -g 编译选项(有时,你甚至需要尝试调试优化过的代码(-O1、-O2等),为什么不一直开启 -g 呢?对于发布版本,你可以在二进制文件上运行 strip 命令来去除符号信息)。
是的。使用 -g 编译选项只编译该文件。
gcc -ggdb3 blah.c -o blah
strip blah
我认为在大、中、小型项目中使用gdb没有太大的区别。但是,在大型项目中,您必须考虑构建所需的空间量,因为调试信息会增加对象和可执行文件的大小。
你可以随时保存调试版本的文件,如果在剥离/发布版本调试后需要重新绑定符号信息,只需输入 "file /path" 命令,gdb 就会重新读取该目标的符号。此外,你还可以使用 "symbol-file /path" 命令将符号信息配置为绑定到剥离文件。
gdb可以在没有符号的情况下工作;只是输出结果比较无用。