【发布时间】:2011-12-01 22:18:45
【问题描述】:
gdb 教程建议使用 'gcc -g' 来编译带有调试符号的程序。
但是,我想调试一个用 make 编译的程序。如何指示 make 使用调试符号进行编译?
谢谢。
【问题讨论】:
标签: linux debugging gcc gdb makefile
gdb 教程建议使用 'gcc -g' 来编译带有调试符号的程序。
但是,我想调试一个用 make 编译的程序。如何指示 make 使用调试符号进行编译?
谢谢。
【问题讨论】:
标签: linux debugging gcc gdb makefile
为了更改编译选项,您需要在运行“make”的目录中编辑文件“Makefile”。在该文件中查找以下内容之一:
定义编译器的变量,可能类似于:
CC='gcc'
调用编译器的实际行(更可能是在手工制作的 Makefile 中)。
称为 CFLAGS 或 CXXFLAGS 的变量
在前两种情况下,只需在'gcc'之后添加'-ggdb',在第三种情况下,只需添加'-ggdb'就更容易了:
CFLAGS='-ggdb'
【讨论】:
我必须经常处理(由其他人创建)的 makefile 并不容易更改编译器的选项。在命令行上简单地设置CFLAGS 很容易,但会破坏许多其他重要的编译选项。但是,您通常可以通过在 make 命令行上覆盖编译器宏来处理这些问题:
make CC="gcc -g" ...other arguments...
您需要确保您对调试感兴趣的所有内容都使用调试标志进行编译。您可以使用make cleanup 或make clean 来清除碎片,或者您可以采取更简单的措施(rm *.o *.a *.so 或类似的方法)。或者,如果您有 GNU Make,则使用 -B 或 --always-make 强制它重建所有内容。
如果您有多目录构建,则需要在所有相关目录中执行此操作。
【讨论】: