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