上次說了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,但是單獨連接的時候卻不會做這個,這就是造成差別的原因。