使用 gdb 进行调试 - 最佳实践
我是 GDB 的初学者,我让它正常工作。 但是,我想知道这是如何在大型项目中使用的。 我有一个项目,其中使用 makefile 和 g++ 完成构建。 为了让 GDB 工作,我们需要使用调试符号进行编译,对吧(g++ -g 文件)?
问题
- 我是否需要在 makefile 中创建一个类似于“debug”的新目标,以便我可以像 make debug 那样进行调试构建。 这是最佳实践吗?
- 假设,我只需要调试 foo.cpp,除了构建包括 main 在内的整个程序之外,是否可以仅为此生成调试符号?
有什么想法吗?
I am a beginner in GDB and I got it working correctly. However, I am wondering how this is used in big projects. I have a project where build is done using makefile and g++. For GDB to work, we need to compile with debug symbols on, right (g++ -g files)?
Question
- Do I need to create a new target in makefile something like "debug", so that I can make a debug build like make debug. Is this the best practice?
- Suppose, I need to debug only foo.cpp and is it possible to generate debug symbols only for that other than building whole program including main?
Any thoughts?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
不需要,尽管您可能希望考虑始终使用 -g 进行构建(有时,您甚至可能需要尝试和调试优化的(-O1、-O2 等)代码;为什么不保留 -g?对于版本,您始终可以在二进制文件上运行 strip。
Not needed, although you may want to consider always building with -g (sometimes, you may even need to try and debug optimized (-O1, -O2, etc) code; why not leave -g on? For releases, you can always just run strip on the binary.
Yes. Build just that file with -g .
我不认为gdb在大、中、小型项目中的使用有很大的区别。 但是,对于大型项目,您必须考虑构建所需的空间量,因为调试信息会增加对象和可执行文件的大小。
I don't think there is a big difference between the usage of gdb in big, medium or small projects. However, for big projects you must consider the amount of space required for the build, because the debugging info increases the size of the object and executable files.
在我工作的大型项目中,我们总是使用最详细的调试信息进行构建(例如,用于本机 gdb 格式的“-ggdb3”或用于访问 gdb 中的宏的“-gdwarf-2 -g3”)。
当我们完成调试后,我们只需使用“strip”命令从二进制文件中删除所有调试信息。
In big projects here where I work we always build with most verbose debugging info possible (like, '-ggdb3' for native gdb format or '-gdwarf-2 -g3' for access to macros in gdb).
When we're done with debugging, we just use 'strip' command to strip all debugging info from the binaries.
gdb 无需符号即可工作; 只是输出的用处要小得多。
gdb will work without the symbols; it's just that the output is much less useful then.
您始终可以将调试版本保存在某处,如果您需要重新绑定符号信息,在调试剥离/发布版本后,您可以直接转到“文件/路径”,gdb 将重新读取符号那个目标。 您还可以使用“symbol-file /path”来配置要绑定到剥离文件的符号信息。
You can always have the debug version's saved somewhere, and if you ever need to re-bind the symbol info, after your debugging the stripped/release version, you can just go "file /path" and gdb will re-read the symbols for that target. Also you can use "symbol-file /path" to configure symbol information to be bound to a stripped file.