gdb:使用-g编译的二进制文件与使用-g编译的二进制编译的代码
问题描述:
我尝试使用gdb在目标上调试嵌入式应用程序。因此,在主机上运行的gdb需要带有调试符号的二进制文件,即用-g编译的二进制文件。在目标上,一个二进制文件的剥离副本就足够了。在目标上,我尝试使用不带-g代替剥离副本编译的二进制文件,但它不起作用。gdb:使用-g编译的二进制文件与使用-g编译的二进制编译的代码
GNU strip丢弃了目标文件中的所有符号(用-g编译)。那么,这不等于一个没有-g编译的二进制文件吗?为什么它不起作用?
答
在主机上,我尝试使用不带-g代替剥离副本的二进制编译,但它没有工作。
你得到了相反的结论:你需要在目标上剥离二进制文件,并在主机上完全调试二进制文件。
gdbserver
确实通过-g
生产不需要(或使用)调试信息,gdb
一样。
最好是不编译两次,而是与-g
一次编译,然后:
cp a.out a.out.stripped
strip -g a.out.stripped
,并保持两者完全调试和剥离二进制在一起。
-g还关闭默认情况下启用的优化,因此它不等同于剥离可执行文件。 –
@ n.m。你错了:对于GCC,'-g'标志根本*不影响优化*。 –
@EmployedRussian你是对的,必须是另一个神话,从旧的坏的许多私有unixes日子继承。 –