資源描述:
《linux編程調試基礎.ppt》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、linux編程調試基礎定制人員:胡小鵬審核人員:實施日期:培訓目的通過本節(jié)課程的學習,您將能夠了解:Linux環(huán)境C/C++編程Gdb調試工具適用對象:初級linux開發(fā)人員。有多少程序員會換燈泡?培訓大綱Linux平臺編寫、編譯C/C++程序并執(zhí)行Linux平臺編寫、編譯和調用動態(tài)庫初學gdb用gdb調試多線程程序用gdb查程序崩潰和線程死鎖的bugLinux平臺編寫、編譯C/C++程序并執(zhí)行巧匠因為他的工具而聞名agoodworkmanisknownbyhistoolsHelloworld!使用vi工具,編寫源碼。#vihelloworld.c
2、#includemain(){printf("helloworld.");}編譯HelloWorld源碼#gcchelloworld.c–ohelloworld.out查看gcc版本#gcc--version查看gcc版本幫助#gcc–help/*簡單幫助*/#mangcc/*詳細幫助*/程序員在linux平臺請記住這個命令man。不知道命令man是做什么用的?沒關系!#manman如果忘記函數(shù)printf的格式和使用方法,怎么辦?manprintfWindows平臺有msdnLinux平臺有manman真漢子,純爺們Linu
3、x平臺編程真不能沒有man.學習沒有捷徑,但一定有方法修改程序,再用gcc編譯,請問可以編譯過嗎?#vihelloworld.c/*#include*/main(){printf("helloworld.");}不知道或忘了stdio.h是干什么東東的?沒關系man他一下#manstdio.h沒編譯通過是因為沒有聲明printf函數(shù)沒聲明是沒包含系統(tǒng)頭文件。stdio.h放在哪個目錄中#whereisstdio.hgcc是如何知道printf實現(xiàn)在哪里的?他是如何找到的?#gcc-print-search-dirs如果gcc在
4、搜索路徑中找不到,就需要用戶指定了Linux平臺編寫、編譯和調用動態(tài)庫helloworld.out有使用動態(tài)庫嗎?如果有,使用的是哪個動態(tài)庫文件?動態(tài)庫在哪里?LD_DEBUG=libs./helloworld.outLD_DEBUG是glibc中的loader為了方便調試而設置的一個環(huán)境變量。通過設置這個環(huán)境變量,可以方便的看到loader的加載過程。那如何指定裝載庫的位置呢。常用的辦法如下:1)ldconfig2)LD_LIBRARY_PATH不推薦修改全局環(huán)境變量,可能會影響其它應用程序。它也會影響gcc編譯時查找?guī)斓穆窂健嶒瀯?chuàng)建動態(tài)庫#v
5、ilibaddint.cintaddint(inta,intb){return(a+b);}編譯#gcc-shared-fPIClibaddint.c-olibaddint.so創(chuàng)建測試程序#vitestaddint.c#include"stdio.h"intaddint(inta,intb);main(){printf("addint=%d",addint(1,2));}編譯測試程序#gcc-L”庫所在目錄”-laddinttestaddint.c-otestaddint.out測試初學gdbTroubleshooter找出問題并加以處理的人
6、如何學習gdb?如何開始學習gdb?man他一下man介紹的重點先學So我們先學習“themostfrequentlyneededGDBcommands”設置斷點break[file:]functionSetabreakpointatfunction(infile).執(zhí)行程序run[arglist]Startyourprogram(witharglist,ifspecified).查看程序調用堆棧btBacktrace:displaytheprogramstack.查看表達式的值printexprDisplaythevalueofanexpress
7、ion斷續(xù)運行程序cContinuerunningyourprogram(afterstopping,e.g.atabreakpoint).執(zhí)行下一行程序nextExecutenextprogramline(afterstopping);stepoveranyfunctioncallsintheline.顯示程序代碼list[file:]functiontypethetextoftheprograminthevicinityofwhereitispresentlystopped.跟進執(zhí)行下一個程序行stepExecutenextprogramlin
8、e(afterstopping);stepintoanyfunctioncallsintheline.在線幫助help[n