Linux gcc和gdb程式調試用法

來源:互聯網
上載者:User

Linux gcc和gdb程式調試用法 gcc一般調試格式:  www.2cto.com  gcc -Wall -o  test   test.c // -wall  顯示程式錯誤詳細資料     gcc -v  // 顯示gcc的版本gcc -o{1,2,3} test  test.c // 1,2,3三個層級的最佳化,最佳化層級越高編譯的時間越長gcc -ggdb3 -Wall -o test  test.c // 運用gdb可以跟蹤偵錯工具,運行這命令gdb告訴gcc,使用gdb擴充產生調試,其中3表示使用的第三級調試資訊,程式員可以獲得更多的資訊。如果程式有多個模組構成可以分別編譯,然後再整體產生一個可執行檔檔案gcc -o test1.c  //產生test1.ogcc -o test2.c  //產生test2.ogcc -o test3.c  //產生test3.ogcc -o program test1.c test2.o test3.o  //產生program 最終可執行檔關於gcc先這麼多,以後用到,再補充。  www.2cto.com  gdb 符號調試器gdb主要提供以下功能:1. 監視程式中變數的值得變化2. 設定斷點,使程式在指定的程式碼上暫停執行,便於觀察3. 逐步執行代碼4. 分析崩潰程式產生core檔案 是首先 gcc -ggdb3 -Wall -o test  test.c  偵錯工具./test  就是正常的執行程式如果出現了不正確的結果,再用gdb調試gdb test出現(gdb)介面提示符run  //開始運行程式,設定斷點在開始運行之前,其他的命令都在運行程式下執行step | s //逐步執行,遇見函數就進入函數next | n //逐步執行,但不進入函數quit | q  //退出gdb  break LineNumber| functionNamecontinue | cont N // 表示跳過的斷點數tbreak  LineNumber| functionName // 這隻一個臨時的斷電,執行一次就自動刪除enable / disable  斷點編號   // 回複失效的斷點| 使有效斷點失效(如果操作多個斷點,中間用空格分開)clear  斷點的行號delete 斷點的編號     clear/delete 都是清楚斷點的,變數不一樣啊watch  邏輯運算式  // 此命令在程式run中運用,必須把main函數設定為斷點,然後continue,程式停止在滿足邏輯運算式地方。 查看棧的資訊bt  number  //如果number>0  表示顯示棧頂上number數棧的資訊                      //若果number<0  表示顯示棧底上number數棧的資訊                  //省略則顯示棧的全部資訊frame | f  n  // 顯示第n層棧的資訊   棧頂是0,一次類推up <n> // 棧向上移n層  省略預設一層down <n> // 棧向下移nceng 省略預設一層select-frame <n> == frame  //只是不輸出棧的資訊up-silently <n> == up  //只是不輸出棧的資訊 down-silently <n> == down //只是不輸出棧的資訊 info args  //顯示當前函數參數名及值info locals //顯示函數中所有局部變數info catch //顯示當先函數的異常處理資訊 顯示原始碼list <function> //顯示function函數的來源程式list  // 顯示當前行前後各顯示listsize/2 行代碼list - // 顯示當前行 前面的代碼list + // 顯示當前行 後面的代碼set listsize <number> // 設定一次顯示原始碼的行數show listsize  //查看listsize的數值list <first>,<last> //顯示全部的原始碼list  ,<last> // 顯示從當前行到last的原始碼list  <linenum> // 顯示linenum行前後各顯示listsize/2 行代碼 list <+ ffset> // 顯示當前行的正位移量list <- ffset> //顯示當前行的負位移量 搜尋原始碼forward-search <regexp> = search <regexp> // 向下搜尋reverse-search <regexp> // 向上搜尋directory <dirname:...> // 增加自訂檔案搜尋路徑,多個路徑用:隔開directory  // 清除所有自訂來源檔案搜尋路徑資訊show directories //顯示自訂來源檔案的搜尋路徑 原始碼的記憶體info line  查看原始碼在記憶體中的地址。info line 後面可以跟“行號”、“函數名”、“檔案名稱:行號”、“檔案名稱:函數名”disassemble <>  // 後面的參數加的和上面的一樣,顯示彙編代碼 查看運行時的資料 print  variable  print file::variable | function::variable // 如果查看的是全域變數的,為了防止和局部變數重名,可以加上通過這個形式說明print *array@len  //顯示動態數組print *array // 顯示靜態數組print  /<f> <expr> // 格式輸出資料輸出格式如下:x 十六進位顯示d 十進位顯示u 十六進位顯示不帶正負號的整數o 八進位顯示t  二進位顯示a 十六進位顯示c 字元格式設定顯示f  浮點數格式顯示查看記憶體x/<n/f/u> <addr> // 其中n表示顯示的第三個參數的個數,f格式見上面,u從當前地址往後請求的位元組數,預設為4,b代表單位元組,h代表雙位元組,w代表4位元組,g表示8位元組 自動顯示display <expr> //只要變數有效範圍內都會顯示undisplay | delete display <dnums...> // 刪除編號為dnums的自動顯示,同時刪除好幾個用空格隔開disable display <dnums...> // 使編號為dnums的自動顯示失效,多個的也是空格隔開enable display <dnums...> //使編號為dnum的自動顯示回複,多個也是用空格隔開info display // 顯示全部自動顯示的資訊 設定顯示選項set print address on  //gdb一般會顯示參數的地址資訊 ,預設認為開啟set print address off   //gdb一般不顯示參數的地址資訊show print address  //查看是否未開啟set print array on // 開啟數組的每個元素佔一行set print array off // 關閉數組的每個元素以逗號隔開show print array //查看是否開啟set print element <number-of-elements> // 顯示數組最大的長度show print elementset print null-stop <on/off> //  是否遇到結束符停止顯示,預設是關閉的set print pretyy on // 結構體顯示比較漂亮show print pretyy // 查看如何顯示結構體set print sevenbit-strings  // 字元顯示是否開啟set print union <on/off> //是指顯示結構體時候是否顯示其內的聯合體資料show print unionset print object <on/off> //在c++,當一個對象指向衍生類別,開啟這個選項,gdb會自動按虛方法調用的規則顯示set print static-members <on/off> // C++對象中,是否顯示其中待用資料成員,預設onshow print static-membersset print vtbl <on/off> // gdb會比較規整格式顯示虛函數,預設關閉show pritn vtbl  查看寄存器info registers // 查看寄存器的情況(除了浮點寄存器)info all-registers //查看所有寄存器的情況(包括浮點寄存器)info registers <regname...>  //查看制定寄存器的情況 gdb環境變數 //你可以環境調試中定義自己的變數,用來儲存偵錯工具中的運行資料。set $var = exprshow convenience  // 查看當前設定的所有環境變數ex > set $i=0print bar[$i++] -> contents  // 輸入這樣的命令後,只需按Enter,重複上一條語句,環境變數會自動累加 修改變數值print  s = expr | set var s = expr  // 最好使用後者 跳轉執行 jump <linenumber> //跳轉到linenumber行jump <address> // 跳轉到地址為address處jump <+offse> // 向下跳offse行//使用jump命令最好在當前的函數的跳轉,跨越函數跳轉會發生錯誤 signal <singal> // 訊號量在1到15 return return <expr>//強制返回,返回可以帶傳回值 call <func> // 強制調用函數 不同的語言使用gdb show language // 查看當前的語言環境info frame // 查看當前函數的程式語言info source // 查看當前檔案的程式語言set language +語言名字 // 手動設定語言 // c/c++/asm/fortran/java/modula-2/pascal/scheme core dump 分析 ulimit -c unlimited // 是自己擁有使用core dump 的許可權gdb test core+xxx // 系統防止本次產生core覆蓋上次的,所有core後面加上pid號加以區分

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.