gdb能夠編譯什麼語言
① GCC+GDB+VIM是什麼
都是linux的命令行工具,其中GCC是編譯器集,支持多種語言(如C、C++、Fortran、Pascal、Objective-C、java, 以及 Ada等語言),而GDB是一個強大的調試器。以上二個工具是都是GNU組織開發的開源軟體。另外,VIM是Linux下的互動式編輯器,更多應用可參考:http://easwy.com/blog/archives/advanced-vim-skills-catalog/
以上工具再加上其它的一些工具(如SVN版本控制、make工程管理等)組合起來就是一個基於命令行的IDE(集成開發環境),基本可以滿足常見的開發工作。
② 在linux系統下用什麼編譯工具來編寫c語言
編寫代碼使用vim。編譯程序使用g++或者gcc。調試程序使用gdb
③ gcc/gdb/makefile需要熟練到什麼程度
gcc 是 Linux 系統下的 C 語言源程序編譯器。如果你需要進行 C 語言編程的話,那麼你必須要精通 gcc 的使用;gdb 是調試產生的二進制代碼的應用程序,如果不需要對匯編語言非常精通的話,那麼這個 gdb 程序的要求不是很高;makefile 是對多個 C 語言模塊之間進行編譯、鏈接非常有用的工具,如果是做軟體開發的話,那麼這個 makefile(即:make 軟體的使用)也是非常重要的。必須要精通 make 工具的使用。
④ gdb 支持javascript嗎
1: 對於在應用程序中加入參數進行調試的方法:
直接用 gdb app -p1 -p2 這樣進行調試是不行的。
需要像以下這樣使用:
#gdb app
(gdb) r -p1 -p2
或者在運行run命令前使用set args命令:
(gdb) set args p1 p2
可以用show args 命令來查看
2. 加入斷點:
break <linenumber>
break <funcName>
break +offset
break -offset
(在當前行號的前面或後面的offset行停住。)
break filename:linenum
在源文件filename的linenum行處停住。
break filename:function
在源文件filename的function函數的入口處停住。
break ... if
...可以是上述的參數,condition表示條件,在條件成立時停住。比如在循環境體中,可以設置 break if i=100,表示當i為100時停住程序。
3. 查看運行時的堆棧:
使用bt命令
4. 列印某個變數的值:
print val
5. 單步: n
繼續運行:c
step
單步跟蹤,如果有函數調用,他會進入該函數。
next
同樣單步跟蹤,如果有函數調用,他不會進入該函數。很像VC等工具中的step over。後面可以加count也可以不加,不加表示一條條地執行,加表示執行後面的count條指令,然後再停住。
set step-mode
set step-mode on
打開step-mode模式,於是,在進行單步跟蹤時,程序不會因為沒有debug信息而不停住。這個參數有很利於查看機器碼。
set step-mod off
關閉step-mode模式。
finish
運行程序,直到當前函數完成返回。並列印函數返回時的堆棧地址和返回值及參數值等信息。
until 或 u
當你厭倦了在一個循環體內單步跟蹤時,這個命令可以運行程序直到退出循環體。
6.在GDB中執行shell命令:
在gdb環境中,你可以執行UNIX的shell的命令,使用gdb的shell命令來完成:
eg. shell make
7. 運行環境
可設定程序的運行路徑。
show paths 查看程序的運行路徑。
set environment varname [=value] 設置環境變數。如:set env USER=hchen
show environment [varname] 查看環境變數。
8.觀察點(WatchPoint)
觀察點一般來觀察某個表達式(變數也是一種表達式)的值是否有變化了,如果有變化,馬上停住程 序。我們有下面的幾種方法來設置觀察點:
watch
為表達式(變數)expr設置一個觀察點。一量表達式值有變化時,馬上停住程序。
rwatch
當表達式(變數)expr被讀時,停住程序。
awatch
當表達式(變數)的值被讀或被寫時,停住程序。
info watchpoints
列出當前所設置了的所有觀察點。
9. 維護breakpoint
clear
清除所有的已定義的停止點。
clear func
清除所有設置在函數上的停止點。
delete [breakpoints] [range...]
刪除指定的斷點,breakpoints為斷點號。如果不指定斷點號,則表示刪除所有的斷點。range 表示斷點號的范圍(如:3-7)。其簡寫命令為d。
比刪除更好的一種方法是disable停止點,disable了的停止點,GDB不會刪除,當你還需要時,enable即可,就好像回收站一樣。
disable [breakpoints] [range...]
disable所指定的停止點,breakpoints為停止點號。如果什麼都不指定,表示disable所有的停止 點。簡寫命令是dis.
enable [breakpoints] [range...]
enable所指定的停止點,breakpoints為停止點號。
10、程序變數
查看文件中某變數的值:
file::variable
function::variable
可以通過這種形式指定你所想查看的變數,是哪個文件中的或是哪個函數中的。例如,查看文件f2.c中的全局變數x的值:
gdb) p 'f2.c'::x
查看數組的值
有時候,你需要查看一段連續的內存空間的值。比如數組的一段,或是動態分配的數據的大小。你可以使用GDB的「@」操作符,「@」的左邊是第一個內存的地址的值,「@」的右邊則你你想查看內存的長度。例如,你的程序中有這樣的語句:
int *array = (int *) malloc (len * sizeof (int));
於是,在GDB調試過程中,你可以以如下命令顯示出這個動態數組的取值:
p *array@len
如果是靜態數組的話,可以直接用print數組名,就可以顯示數組中所有數據的內容了。
11.輸出格式
一般來說,GDB會根據變數的類型輸出變數的值。但你也可以自定義GDB的輸出的格式。例如,你想輸出一個整數的十六進制,或是二進制來查看這個整型變數的中的位的情況。要做到這樣,你可以使用GDB的數據顯示格式:
x 按十六進制格式顯示變數。
d 按十進制格式顯示變數。
u 按十六進制格式顯示無符號整型。
o 按八進制格式顯示變數。
t 按二進制格式顯示變數。
a 按十六進制格式顯示變數。
c 按字元格式顯示變數。
f 按浮點數格式顯示變數。
(gdb) p i
$21 = 101
(gdb) p/a i
$22 = 0x65
(gdb) p/c i
$23 = 101 'e'
(gdb) p/f i
$24 = 1.41531145e-43
(gdb) p/x i
$25 = 0x65
(gdb) p/t i
$26 = 1100101
11.查看內存
使用examine命令(簡寫是x)來查看內存地址中的值。x命令的語法如下所示:
x/
n、f、u是可選的參數。
n 是一個正整數,表示顯示內存的長度,也就是說從當前地址向後顯示幾個地址的內容。
f 表示顯示的格式,參見上面。如果地址所指的是字元串,那麼格式可以是s,如果地十是指令地址,那麼格式可以是i。
u 表示從當前地址往後請求的位元組數,如果不指定的話,GDB默認是4個bytes。u參數可以用下面的字元來代替,b表示單位元組,h表示雙位元組,w表示四位元組,g表示八位元組。當我們指定了位元組長度後,GDB會從指內存定的內存地址開始,讀寫指定位元組,並把其當作一個值取出來。
n/f/u三個參數可以一起使用。例如:
命令:x/3uh 0x54320 表示,從內存地址0x54320讀取內容,h表示以雙位元組為一個單位,3表示三個單位,u表示按十六進制顯示。
12.自動顯示
你可以設置一些自動顯示的變數,當程序停住時,或是在你單步跟蹤時,這些變數會自動顯示。相關的GDB命令是display。
display
display/
display/ expr
expr是一個表達式,fmt表示顯示的格式,addr表示內存地址,當你用display設定好了一個或多個表達式後,只要你的程序被停下來,GDB會自動顯示你所設置的這些表達式的值。
格式i和s同樣被display支持,一個非常有用的命令是:
display/i $pc
undisplay
delete display
刪除自動顯示,dnums意為所設置好了的自動顯式的編號。
disable display
enable display
disable和enalbe不刪除自動顯示的設置,而只是讓其失效和恢復。
info display
查看display設置的自動顯示的信息。GDB會打出一張表格,向你報告當然調試中設置了多少個自動顯示設置,其中包括,設置的編號,表達式,是否enable。
13. 設置顯示選項
set print address
set print address on
打開地址輸出,當程序顯示函數信息時,GDB會顯出函數的參數地址。系統默認為打開的,
show print address
查看當前地址顯示選項是否打開。
set print array
set print array on
打開數組顯示,打開後當數組顯示時,每個元素佔一行,如果不打開的話,每個元素則以逗號分隔。這個選項默認是關閉的。與之相關的兩個命令如下,我就不再多說了。
set print array off
show print array
set print elements
這個選項主要是設置數組的,如果你的數組太大了,那麼就可以指定一個來指定數據顯示的最大長度,當到達這個長度時,GDB就不再往下顯示了。如果設置為0,則表示不限制。
show print elements
查看print elements的選項信息。
set print null-stop
如果打開了這個選項,那麼當顯示字元串時,遇到結束符則停止顯示。這個選項默認為off。
set print pretty on
如果打開printf pretty這個選項,那麼當GDB顯示結構體時會比較漂亮。
14.關於顯示源碼list
⑤ 如何使用GDB調試C語言程序
GDB是GNU開源組織發布的一個強大的UNIX下的程序調試工具,基於命令行界面。
在Windows下如果想使用GDB,可以先下載安裝一個MiniGW,這個工具包含GCC編譯器和GDB調試器,再配合一個Notepad++或者Sublime Text(Sublime這款編輯器不是免費的,可以參考我前面寫的一篇文章的破解方法來免費使用《Sublime Text 2在Linux和Windows下的破解》)來寫代碼,這樣就足夠了;
大多數Linux發行版都包含了GCC編輯器和GDB調試器,如果沒有可以自行安裝,這不是本文討論論的重點,配合Vim或者Linux版本的Sublime Text來寫代碼也是不錯的選擇;
⑥ 小弟請教vim和gdb,gcc之間有什麼聯系嗎
gcc和gdb有直接聯系.
gcc是編譯器. gdb是調試工具.
用gcc做好軟體,編譯後如果有問題,可以用gdb調試.
當然 gdb不僅僅可以調試C語言.
而vim只是一個編譯器而已. 之所以和gcc,gdb放一起說, 是因為在Linux/Unix上, 很多人都用vim來書寫C語言的源碼.
所以這三個聯系的紐帶就是C語言, 分別負責編寫, 調試,和編譯.
⑦ gdb怎麼用
GDB調試,建議去下個系統的文檔;
GDB調試器
GCC用於編譯程序,而Linux的另一個GNU工具gdb則用於調試程序。gdb是一個用來調試C和C++程序的強力調試器,我們能通過它進行一系列調試工作,包括設置斷點、觀查變數、單步等。
其最常用的命令如下:
file:裝入想要調試的可執行文件。
kill:終止正在調試的程序。
list:列表顯示源代碼。
next:執行一行源代碼但不進入函數內部。
step:執行一行源代碼而且進入函數內部。
run:執行當前被調試的程序
quit:終止gdb
watch:監視一個變數的值
break:在代碼里設置斷點,程序執行到這?鍤憊移?
make:不退出gdb而重新產生可執行文件
shell:不離開gdb而執行shell
2)從你的描述上看來,你是用單獨的gdb.exe調試器,調試的時候不需要運行程序的,編譯的時候 只要加上相應的參數(」-g「)產生編譯後的可執行文件,
以gcc編譯sum.c(加-g選項產生debug信息):
gcc –g –o sum sum.c
在命令行上鍵入gdb sum並按回車鍵就可以開始調試sum了,再運行run命令執行sum。
⑧ gdb是什麼意思
gdb:UNIX及UNIX-like下的調試工具。
如果在 UNIX平台下做軟體,GDB調試工具相比於VC、z的優點是具有修復網路斷點以及恢復鏈接等功能,比BCB的圖形化調試器有更強大的功能。
2009年12月29日,程序調試工具 GDB 7.0.1 發布,新版本修正了7.0版本的一些嚴重的堆棧溢出bug,這些bug可能導致 GDB 調試進程中斷,修正了在 FreeBSD 和 IRⅨ 系統下無法編譯的問題,增加了對 Thumb2調試的支持,還有其他一些小bug的修復。
版本發布:
2009年12月29日,程序調試工具 GDB 7.0.1 發布,新版本修正了7.0版本的一些嚴重的堆棧溢出bug,這些bug可能導致 GDB 調試進程中斷,修正了在 FreeBSD 和 IRⅨ 系統下無法編譯的問題,增加了對 Thumb2調試的支持,還有其他一些小bug的修復。
2010年03月19日,GDB 7.1 發布。
詳細改進內容:多程序調試的支持。
位置獨立的可執行文件(派)調試的支持。
新的目標(包括一個模擬器):Xilinx MicroBlaze和瑞薩RX。
⑨ 如何編譯GDB
tar xvf 這跟你的包名(假如是GDBXX)
cd GDBXX
./configure && make
cp -v gdb/gdb /usr/bin/
你的是在RH下的肯定是SHELL嘛,這個是在UNIX下的調試軟體哈.unix下沒有EXE這個概念哈,你下的包都是代碼形式,需要編譯哈,網上的RPM包太難找了