带“-ggdb1”和不带“-ggdb1”的 gcc 调试信息有什么区别?选项?
默认情况下,gcc
会将符号表添加到可执行文件,因此 gdb
将获得可读的堆栈跟踪。
gcc
手册页中的 -ggdb1
选项的文档显示:
级别 1 产生最少的信息,足以在您不打算调试的程序部分中进行回溯。其中包括函数和外部变量的描述,但没有有关局部变量的信息,也没有行号。
...在我看来,这与仅调用 gcc
没有任何与调试相关的参数相同。但显然有额外的符号发出(.debug_frame
、.debug_str
、.debug_loc
)。
那么到底有什么区别,使用 -ggdb1
编译与简单地不剥离可执行文件相比有什么好处吗?
By default, gcc
will add symbol table to the executable, so gdb
will get a readable stack trace.
Documentation for -ggdb1
option in gcc
man page says:
Level 1 produces minimal information, enough for making backtraces in parts of the program that you don't plan to debug. This includes descriptions of functions and external variables, but no information about local variables and no line numbers.
...which looks to me the same as just calling gcc
without any debug-related arguments. But there are clearly extra symbols emitted (.debug_frame
, .debug_str
, .debug_loc
).
So what exactly is the difference, and is there any benefit of compiling with -ggdb1
as opposed to simply not stripping the executable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
找到 dwarfdump 实用程序(libdwarf 的一部分)并查看这些部分中发出的调试信息。然后自己决定使用 1 级调试信息进行编译与不剥离可执行文件之间是否有任何区别。 DWARF 规范也是免费提供的。
Find
dwarfdump
utility (part of libdwarf) and see what debug info is emitted in those sections. Than decide for yourself whether there is any difference between compiling with level 1 debug info and not stripping the executable. The DWARF specification is also freely available.