跳至內容

GNU偵錯器

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

GNU 偵錯器(英語:GNUDebugger,縮寫:GDB), 是 GNU 軟體系統中的標準偵錯器,此外 GDB 嘛是一个有移紮性的偵錯器,經過移紮需求的調修佮重新編譯,如今濟濟的類 UNIX 作業系統上攏會當使用 GDB,這馬有 GDB 所以支援除錯的程式語言有 C、C + +、Pascal 以及 FORTRAN。

歷史

GNU Debugger 頭先是佇一九八八年由理察 ・ 馬修 ・ 斯托曼(Richard Stallman)所編寫,了後以 GNU 通用公眾授權條款(GNU General Public License , GNU GPL)的授權方式共軟體釋出,所以 GNU Debugger 是一套自由軟體。釋出了的一九九空年-一九九三年間對任職於 Cygnus Solutions 公司的約翰 ・ 吉爾摩(John Gilmore)扞後續的軟體維護工課。

技術細節

特點

GDB 具備各種偵錯功效,能針對電腦程式的執行進行追蹤和警告,使用 GDB 的除錯人員會當監督佮修改程式的內部變數值,甚至監督佮修改獨立佇主程式運作外,以獨立個體型態呼用(呼叫使用)的函式。

GDB 會當替濟種無仝處理器架構頂執行的軟體進行偵錯,這處理器架構包括:DEC / COMPAQ / HP 的 Alpha、ARM 的 ARM、Hitachi 的 H 三百分之八、IBM 的 System / 三百七十、System 三百九十、Intel 的 X 八十六佮 X 八十六陵六十四、IA 被六十四 " Itanium "、Motorola 六桱八千、MIPS 的 MIPS、HP 的 PA-RISC、AIM 聯盟的 PowerPC、Hitachi / Renesas / ST 的 SuperH、Sun 的 SPARC、DEC / COMPAQ / HP 的 VAX。

此外一寡較少人知的處理器嘛仝款受 GDB 支援,包括講:AMD 的 A 二十九 K、ARC 的 ARC、Atmel 的 AVR、Axis Communications 的 ETRAX CRIS、D 十 V、D 三十 V、Fujitsu 的 FR 鋪三十、FR-V、Intel 的 i 九百六十、Renesas 的 M 三十二 R、Motorola 的六十八 HC 十一、Motorola 的八○八千、Freescale 的 MCORE、MN 一孵空二百、MN 一孵空三百、NS 三十二 K、Stormy 十六、V 八仔五、以及 Zilog 的 Z 八千,此外閣較後續版本的 GDB 干焦會曉增加閣較濟的處理器支援煞袂曉短少。

GDB 的內部已經有備依據各種支援無仝處理器的指令集所編譯做的類比推演程式(Simulator), 就連大眾少了解減用的 M 三十二 R、V 八百五十等架構的處理器嘛攏具備。

遠端偵錯

GDB 有一種「遠端,Remote」模式,這款模式多半去是去為1875入式系統進行偵錯的時陣使用,佇遠端操作指的是:GDB 佇一部機器內底執行,啊若欲進行偵錯的程式是佇另外一台機器上執行,紲落去欲偵毋著的機器上會閣加貯一个名為「Stub」的細條程式,該該是會當佮另外一爿的 GDB 程式溝通,溝通的路徑會當是兩台機器間的串接式接線,嘛是會當是支援 TCP / IP 協定傳輸的各種網路,佇咧 TCP / IP 網路佮協定上才閣加搭傳輸 GDB 專有的除錯操作用通訊協定,遮爾仔便能進行遠端偵錯。

毋但 GDB 有遠端的模式,KGDB 嘛仝款有遠端的模式,KGDB 主要是為執行中的 Linux 核心進行偵錯,而且 GDB 著是主要是用佇原代碼的層次。運用 KGDB,負責核心程式的程式設計師會當將核心來近若像應用程式的除錯方式來偵錯,包括為核心程式碼設定中斷點(breakpoint)、 予核心程式以步階方式逐行執行佮觀看變數值等等。

佇咧某一个架構的處理器當中,會以硬體方式提供一寡偵錯功用的暫存器,猶閣有會當設定觀察點(Watchpoint), 觀察點的功用是:當程式設計師指定的記持體位址被執行到抑是存取到時,觀察點就會去觸發、觸動一个斷點。對這來 KGDB 會當安裝佇一台傳統機器頂懸,閣透過遠端模式來使用另外一部受偵錯機器上的硬體偵錯功效,仝款的兩部機器會當用各種方式來進行溝通,若串接式接線、乙太網路等,尤其佇咧 FreeBSD 作業系統頂面閣允准使用 FireWire 接線,閣用直接記憶體存取(Direct Memory Access,DMA)的功效來協助遠端偵錯。

現有限制

GDB 運用上上明顯的限制是佇咧「使用者介面」的部份,預設干焦這个命令列介面(CLI)可用,毋是有較會當接合手、直覺操作的圖形化使用者介面(GUI), 毋過這一弱處也已經有幾个前端程式為其補強,比如講 DDD、GDBtk/Insight 以及 Emacs 中的「GUD 模式」等,有矣遮的補強了後,GDB 咧功效使用的方便性上就會當佮「整合發展環境中的偵錯功效使用」相接近。

另外咧,有一寡偵錯工具(軟體)嘛予人設計做伙 GDB 配搭使用,比如講記憶體洩漏(memory leak)的偵測程式。

命令列使用的範例

` ` ` gdb prog . out debug prog . out ( gdb ) run run ` ` `

過程範例

以下是用 GDB 進行除錯的一段過程示範,欲來進行偵錯的程式已經有咧疊追蹤區內底:

` ` ` GNU gdb Red Hat Linux ( 六桱三 . 空九五空一八二一 rh ) Copyright 兩千空四 Free Software Foundation , Inc . GDB is free software , covered by the GNU General Public License , and you are welcome to change it and / or distribute copies of it under certain conditions . Type " show copying " to see the conditions . There is absolutely no warranty for GDB . Type " show warranty " for details . This GDB was configured as " i 三百八十六-redhat-linux-gnu " . . . Using host libthread _ db library " / lib / libthread _ db . so . 一 " .

( gdb ) run Starting program : / home / sam / programming / crash Reading symbols from shared object read from target memory . . . done . Loaded system supplied DSO at 零 xc 一孵一千 This program will demonstrate gdb

Program received signal SIGSEGV , Segmentation fault . 零 x 八百空四孵八千四百二十八 in function _ 二 ( x=二十四 ) at crash . c : 二十二二十二 return * y ; ( gdb ) edit ( gdb ) shell gcc crash . c-o crash-gstabs + ( gdb ) run The program being debugged has been started already . Start it from the beginning ? ( y or n ) y warning : cannot close " shared object read from target memory " : File in wrong format ` / home / sam / programming / crash'has changed ; re-reading symbols . Starting program : / home / sam / programming / crash Reading symbols from shared object read from target memory . . . done . Loaded system supplied DSO at 零 xa 三 e 零 This program will demonstrate gdb 二十四 Program exited normally . ( gdb ) quit ` ` `

這个程式已經佇咧執行階段,了後揣出這个程式中會致使執行錯誤的段落,然後共對應處的原代碼用編輯器進行錯誤修訂,更正完成了用 GNU 編譯器(GCC)重新編譯並且再一遍執行。

參考

  • 冊:_ Debugging with GDB _(在此暫的譯成:用 GDB 進行除錯)
  • 出版:二空空二年,自由軟體基金會(Free Software Foundation,FSF)
  • ISBN 一孵八十八孵兩千一百十四孵八十八孵四
  • 作者:Richard M . Stallman、Roland Pesch、Stan Shebs 佮其他所有參與成員

外部連結

  • GDB 的官方網站(英文)
  • GDB 檔案:" Debugging with GDB,用 GDB 進行除錯 "(線頂 HTML 格式,打做 PDF 格式是超過四百頁)(英文)
  • 深入 GDB(英文)
  • 使用 GDB 進行 C 佮 C + + 程式語言的除錯(英文)
  • 用來替 Linux 核心進行除錯的 GDB 後端程式:KGDB(英文)
  • Peter Jay Salzman 所編:欲按怎閣較專精、好用 GDB(英文)
  • GDB 內部結構 ( The Architecture of Open Source Applications , Volume II-ISBN 九九石七千八百一十一鋪空五百五十七刣一千八百一十七 )(英文)