歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux gcc和gdb程序調試用法

Linux gcc和gdb程序調試用法

日期:2017/3/1 16:35:53   编辑:關於Linux
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.o gcc -o test2.c //生成test2.o gcc -o test3.c //生成test3.o gcc -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| functionName continue | 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 element set print null-stop <on/off> // 是否遇到結束符停止顯示,默認是關閉的 set print pretyy on // 結構體顯示比較漂亮 show print pretyy // 查看如何顯示結構體 set print sevenbit-strings // 字符顯示是否打開 set print union <on/off> //是指顯示結構體時候是否顯示其內的聯合體數據 show print union set print object <on/off> //在c++,當一個對象指向派生類,打開這個選項,gdb會自動按虛方法調用的規則顯示 set print static-members <on/off> // C++對象中,是否顯示其中靜態數據成員,默認on show print static-members set print vtbl <on/off> // gdb會比較規整格式顯示虛函數,默認關閉 show pritn vtbl 查看寄存器 info registers // 查看寄存器的情況(除了浮點寄存器) info all-registers //查看所有寄存器的情況(包括浮點寄存器) info registers <regname...> //查看制定寄存器的情況 gdb環境變量 //你可以環境調試中定義自己的變量,用來保存調試程序中的運行數據。 set $var = expr show convenience // 查看當前設置的所有環境變量 ex > set $i=0 print 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號加以區分
Copyright © Linux教程網 All Rights Reserved