使用 gdb 进行调试 - 最佳实践

发布于 2024-07-18 04:53:50 字数 348 浏览 4 评论 0原文

我是 GDB 的初学者,我让它正常工作。 但是,我想知道这是如何在大型项目中使用的。 我有一个项目,其中使用 makefile 和 g++ 完成构建。 为了让 GDB 工作,我们需要使用调试符号进行编译,对吧(g++ -g 文件)?

问题

  1. 我是否需要在 makefile 中创建一个类似于“debug”的新目标,以便我可以像 make debug 那样进行调试构建。 这是最佳实践吗?
  2. 假设,我只需要调试 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

  1. 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?
  2. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

  1. 不需要,尽管您可能希望考虑始终使用 -g 进行构建(有时,您甚至可能需要尝试和调试优化的(-O1、-O2 等)代码;为什么不保留 -g?对于版本,您始终可以在二进制文件上运行 strip。

  2. -g 构建
  1. 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.

  2. Yes. Build just that file with -g .

乱世争霸 2024-07-25 04:53:50

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

  1. 如果您最初低估了整个解决方案的调试需求,您将来可能会因自己的决定而受到影响。 当构建可以在有或没有调试信息的情况下完成时总是好的,因此请仔细编写构建脚本。
  2. 是的,但请考虑我之前的回答。 有时问题可能来自于您没有调试信息的模块。

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.

  1. If you initially underestimate the need for debugging of the whole solution you will likely suffer from your decision in the future. It is always good when the build could be done with or without debugging information, so write your build scripts carefully.
  2. Yes, but consider my previous answer. Sometimes the problem could be coming from a module for which you don't have debugging info.
早茶月光 2024-07-25 04:53:50

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

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

gcc -ggdb3 blah.c -o blah
strip blah

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.

gcc -ggdb3 blah.c -o blah
strip blah
放手` 2024-07-25 04:53:50

gdb 无需符号即可工作; 只是输出的用处要小得多。

  1. 这是一个偏好问题。 我默认在调试模式下构建所有内容,并在必要时进行发布。
  2. 是的。

gdb will work without the symbols; it's just that the output is much less useful then.

  1. It's a matter of preference. I build everything by default in debug mode, and do make release when necessary.
  2. Yes.
弥繁 2024-07-25 04:53:50

您始终可以将调试版本保存在某处,如果您需要重新绑定符号信息,在调试剥离/发布版本后,您可以直接转到“文件/路径”,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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文