上次说了GDB的pretty printer,这次来说说调试程序的问题。
在Linux或者Windows下面,写好代码,g++编译,连接,调试,一切很顺畅。
但是在Mac下面,有点小问题。
我们如果是直接编译生成可执行文件:
g++ test.cpp -g -o test
ok,我们用GDB调试,没有问题。
但是如果我们分两步,编译和连接分开的话:
g++ test.cpp -g -c -o test.o
g++ -o test test.o
这次我们gdb test再调试,会发现GDB找不到调试符号信息!
两次生成有什么不同呢?
一次编译生成的test,旁边有一个test.dSYM,而单独连接的test,没有这个。
test.dSYM就是调试符号信息。
要想生成这个东西,也简单,运行dsymutil就可以了:
dsymutil test
再然后,就可以用GDB顺利调试了。
g++直接生成可执行文件的时候,会帮我们调用一次dsymutil,但是单独连接的时候却不会做这个,这就是造成差别的原因。