歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> gdb新手必知必會

gdb新手必知必會

日期:2017/3/1 17:14:03   编辑:關於Linux
gdb新手必知必會 調用gdb編譯需要在cc後面加 -g參數再加-o; [root@redhat home]#gdb 調試文件:啟動gdb (gdb) l :(字母l)列出源碼 www.2cto.com (gdb) break n :在第n行處設置斷點 (gdb) break func:在函數func()的入口處設置斷點 (gdb) info break: 查看斷點信息 (gdb) r:運行程序 (gdb) n:單步執行 (gdb) c:繼續運行 (gdb) p 變量 :打印變量的值 (gdb) bt:查看函數堆棧 (gdb) finish:退出函數 (gdb) shell 命令行:執行shell命令行 (gdb) set args 參數:指定運行時的參數 (gdb) show args:查看設置好的參數 (gdb) show paths:查看程序運行路徑; set environment varname [=value] 設置環境變量。如:set env USER=hchen; show environment [varname] 查看環境變量; (gdb) cd 相當於shell的cd; (gdb)pwd :顯示當前所在目錄 (gdb)info program: 來查看程序的是否在運行,進程號,被暫停的原因。 (gdb)clear 行號n:清除第n行的斷點 gdb)disable 斷點號n:暫停第n個斷點 (gdb)enable 斷點號n:開啟第n個斷點 (gdb)step:單步調試如果有函數調用,則進入函數;與命令n不同,n是不進入調用的函數的 list :簡記為 l ,其作用就是列出程序的源代碼,默認每次顯示10行。 list 行號:將顯示當前文件以“行號”為中心的前後10行代碼,如:list 12 list 函數名:將顯示“函數名”所在函數的源代碼,如:list main list :不帶參數,將接著上一次 list 命令的,輸出下邊的內容。 注意 :如果運行list 命令得到類似如下的打印,那是因為在編譯程序時沒有加入 -g 選項: (gdb) list 1 ../sysdeps/i386/elf/start.S: No such file or directory. in ../sysdeps/i386/elf/start.S www.2cto.com run:簡記為 r ,其作用是運行程序,當遇到斷點後,程序會在斷點處停止運行,等待用戶輸入下一步的命令。 回車:重復上一條命令。 set args:設置運行程序時的命令行參數,如:set args 33 55 show args:顯示命令行參數 continue:簡訊為 c ,其作用是繼續運行被斷點中斷的程序。 break:為程序設置斷點。 break 行號:在當前文件的“行號”處設置斷點,如:break 33 break 函數名:在用戶定義的函數“函數名”處設置斷點,如:break cb_button info breakpoints:顯示當前程序的斷點設置情況 disable breakpoints Num:關閉斷點“Num”,使其無效,其中“Num”為 info breakpoints 中顯示的對應值 enable breakpoints Num:打開斷點“Num”,使其重新生效 step:簡記為 s ,單步跟蹤程序,當遇到函數調用時,則進入此函數體(一般只進入用戶自定義函數)。 next:簡記為 n,單步跟蹤程序,當遇到函數調用時,也不進入此函數體;此命令同 step 的主要區別是,step 遇到用戶自定義的函數,將步進到函數中去運行,而 next 則直接調用函數,不會進入到函數體內。 until:當你厭倦了在一個循環體內單步跟蹤時,這個命令可以運行程序直到退出循環體。 finish: 運行程序,直到當前函數完成返回,並打印函數返回時的堆棧地址和返回值及參數值等信息。 stepi或nexti:單步跟蹤一些機器指令。 print 表達式:簡記為 p ,其中“表達式”可以是任何當前正在被測試程序的有效表達式,比如當前正在調試C語言的程序,那麼“表達式”可以是任何C語言的有效表達式,包括數字,變量甚至是函數調用。 print a:將顯示整數 a 的值 print ++a:將把 a 中的值加1,並顯示出來 print name:將顯示字符串 name 的值 print gdb_test(22):將以整數22作為參數調用 gdb_test() 函數 print gdb_test(a):將以變量 a 作為參數調用 gdb_test() 函數 bt:顯示當前程序的函數調用堆棧。 display 表達式:在單步運行時將非常有用,使用display命令設置一個表達式後,它將在每次單步進行指令後,緊接著輸出被設置的表達式及值。如: display a watch 表達式:設置一個監視點,一旦被監視的“表達式”的值改變,gdb將強行終止正在被調試的程序。如: watch a www.2cto.com kill:將強行終止當前正在調試的程序 help 命令:help 命令將顯示“命令”的常用幫助信息 call 函數(參數):調用“函數”,並傳遞“參數”,如:call gdb_test(55) layout:用於分割窗口,可以一邊查看代碼,一邊測試: layout src:顯示源代碼窗口 layout asm:顯示反匯編窗口 layout regs:顯示源代碼/反匯編和CPU寄存器窗口 layout split:顯示源代碼和反匯編窗口 Ctrl + L:刷新窗口 quit:簡記為 q ,退出gdb 當然,gdb的功能遠不止這些,包括多進程/多線程/信號/遠程調試等功能在這裡均沒有提及,有需要的讀者可以參考其它信息
Copyright © Linux教程網 All Rights Reserved