上次說了GDB的pretty printer,這次來說說調(diào)試程序的問題。
在Linux或者Windows下面,寫好代碼,g++編譯,連接,調(diào)試,一切很順暢。
但是在Mac下面,有點(diǎn)小問題。
我們?nèi)绻侵苯泳幾g生成可執(zhí)行文件:
g++ test.cpp -g -o test
ok,我們用GDB調(diào)試,沒有問題。
但是如果我們分兩步,編譯和連接分開的話:
g++ test.cpp -g -c -o test.o
g++ -o test test.o
這次我們gdb test再調(diào)試,會(huì)發(fā)現(xiàn)GDB找不到調(diào)試符號(hào)信息!
兩次生成有什么不同呢?
一次編譯生成的test,旁邊有一個(gè)test.dSYM,而單獨(dú)連接的test,沒有這個(gè)。
test.dSYM就是調(diào)試符號(hào)信息。
要想生成這個(gè)東西,也簡單,運(yùn)行dsymutil就可以了:?
dsymutil test
再然后,就可以用GDB順利調(diào)試了。
g++直接生成可執(zhí)行文件的時(shí)候,會(huì)幫我們調(diào)用一次dsymutil,但是單獨(dú)連接的時(shí)候卻不會(huì)做這個(gè),這就是造成差別的原因。