fbpx
维基百科

GNU侦错器

GNU偵錯器(英語:GNU Debugger,缩写:GDB),是GNU軟體系統中的標準偵錯器,此外GDB也是個具有移攜性的偵錯器,經過移攜需求的調修與重新編譯,如今許多的類UNIX作業系統上都可以使用GDB,而現有GDB所能支援除錯的程式語言有CC++Pascal以及FORTRAN

GNU Debugger
開發者GNU計劃
当前版本
  • 14.1 (2023年12月3日;穩定版本)[1]
源代码库
  • sourceware.org/git/binutils-gdb.git
操作系统类Unix系统Windows
类型调试工具
许可协议GNU通用公共许可证
网站gnu.org/software/gdb/

歷史 编辑

GNU Debugger最初是在1988年由理查德·马修·斯托曼(Richard Stallman)所撰寫,之後以GNU通用公共許可證(GNU General Public License, GNU GPL)的授權方式將軟體釋出,因此GNU Debugger是一套自由軟體。釋出後的1990年-1993年間則由任職於Cygnus Solutions公司的約翰·吉爾摩(John Gilmore英语John Gilmore (advocate))負責後續的軟體維護工作。

技術細節 编辑

特點 编辑

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

GDB能為多種不同處理器架構上執行的軟體進行偵錯,這些處理器架構包括:DEC/COMPAQ/HP的Alpha、ARM的ARM、Hitachi的H8/300、IBM的System/370、System 390、Intel的X86X86-64IA-64 "Itanium"、Motorola 68000、MIPS的MIPS、HP的PA-RISCAIM联盟PowerPC、Hitachi/Renesas/ST的SuperH、Sun的SPARC、DEC/COMPAQ/HP的VAX

此外一些比較少人知的處理器也一樣受GDB支援,包括:AMD的A29K、ARC的ARC、Atmel的AVR、Axis Communications的ETRAX CRIS、D10V、D30V、Fujitsu的FR-30、FR-V、Intel的i960、Renesas的M32R、Motorola的68HC11、Motorola的88000、Freescale的MCORE、MN10200、MN10300、NS32K、Stormy16、V850、以及Zilog的Z8000,此外更後續版本的GDB只會增加更多的處理器支援而不會短少。

GDB的內部已具備了依據各種支援不同處理器的指令集所編譯成的模擬推演程式(Simulator英语Instruction Set Simulator),就連大眾少知少用的M32R、V850等架構的處理器也都具備。

遠端偵錯 编辑

 
GDB的一大特點是:除了具備傳統的本機端、近端偵錯外,也可透過接線、網路的通訊方式進行遠端性的遙控偵錯。

GDB具有一種「遠端,Remote」模式,此種模式多半是在為嵌入式系統進行偵錯時使用,遠端操作指的是:GDB在一部機器內執行,而要進行偵錯的程式是在另一部機器上執行,接著欲偵錯的機器上會再加裝一個名為「Stub」的小程式,該程式能夠與另一端的GDB程式溝通,溝通的路徑可以是兩部機器間的串接式接線英语Serial Cable,也可以是支援TCP/IP協定傳輸的各種網路,在TCP/IP網路及協定上再加搭傳輸GDB專有的除錯操作用通訊協定,如此便能進行遠端偵錯。

不僅GDB有遠端模式,KGDB也同樣具有遠端模式,KGDB主要是為執行中的Linux核心進行偵錯,而GDB則是主要是用在原代碼的層次。運用KGDB,負責核心程式的程式設計師可以將核心以近似於應用程式的除錯方式來偵錯,包括為核心程式碼設置中斷點(breakpoint)、讓核心程式以步階方式逐行執行以及觀看變數值等。

在某些架構的處理器中,會以硬體方式提供一些偵錯功用的寄存器,以及可以設定觀察點(Watchpoint),觀察點的功用是:當程式設計師指定的記憶體位址被執行到或訪問到時,觀察點即會去觸發、觸動一個中斷點。對此KGDB可以安裝在一部傳統機器上,並透過遠端模式使用另一部受偵錯機器上的硬體偵錯功效,同樣的兩部機器可用各種方式進行溝通,如串接式接線、乙太網路等,尤其在FreeBSD作業系統上還允許使用FireWire接線,並用直接內存訪問(Direct Memory Access,DMA)的功效來協助遠端偵錯。

現有限制 编辑

 
GDB的GUI化前端程式:Insight(過去稱GDBtk),圖中為「堆疊瀏覽器」部分。

GDB運用上最明顯的限制是在「使用者介面」的部分,預設只有命令列介面(CLI)可用,而不具備較能親合上手、直覺操作的圖形化使用者介面(GUI),不過此一弱處也已經有幾個前端程式為其補強,例如DDD、GDBtk/Insight (页面存档备份,存于互联网档案馆)以及Emacs中的「GUD 模式」等,有了這些補強後,GDB在功效使用的便利性上就能夠與「整合發展環境中的偵錯功效使用」相接近。

另外,有些偵錯工具(軟體)也被設計成能與GDB搭配使用,例如記憶體洩漏memory leak)的偵測程式。

命令列使用的範例 编辑

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

過程範例 编辑

以下是用GDB進行除錯的一段過程示範,欲進行偵錯的程式已在堆疊追蹤英语Stack trace區內:

GNU gdb Red Hat Linux (6.3.0.0-1.21rh) Copyright 2004 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 "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". (gdb) run Starting program: /home/sam/programming/crash Reading symbols from shared object read from target memory...done. Loaded system supplied DSO at 0xc11000 This program will demonstrate gdb Program received signal SIGSEGV, Segmentation fault. 0x08048428 in function_2 (x=24) at crash.c:22 22 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 0xa3e000 This program will demonstrate gdb 24 Program exited normally. (gdb) quit 

這個程式已處在執行階段,之後找出這個程式中會導致執行錯誤的段落,然後將對應處的原代碼用編輯器進行錯誤修訂,更正完成後用GNU 編譯器(GCC)重新編譯並再次執行。

參考 编辑

外部連結 编辑

  • GDB的官方網站 (页面存档备份,存于互联网档案馆(英文)
  • GDB文件:"Debugging with GDB,用GDB進行除錯" (页面存档备份,存于互联网档案馆)(線上HTML格式,折算成PDF格式則超過400頁)(英文)
  • (英文)
  • (英文)
  • (英文)
  • (英文)
  • GDB內部結構 (页面存档备份,存于互联网档案馆) (The Architecture of Open Source Applications, Volume II - ISBN 9781105571817) (英文)
  1. ^ "GDB 14.1 released!"; 作者姓名字符串: Joel Brobecker; 出版日期: 2023年12月3日; 检索日期: 2023年12月3日.

gnu侦错器, gnu偵錯器, 英語, debugger, 缩写, 是gnu軟體系統中的標準偵錯器, 此外gdb也是個具有移攜性的偵錯器, 經過移攜需求的調修與重新編譯, 如今許多的類unix作業系統上都可以使用gdb, 而現有gdb所能支援除錯的程式語言有c, pascal以及fortran, debugger開發者gnu計劃当前版本14, 2023年12月3日, 穩定版本, 源代码库sourceware, binutils, git操作系统类unix系统, windows类型调试工具许可协议gnu通用公共许可证. GNU偵錯器 英語 GNU Debugger 缩写 GDB 是GNU軟體系統中的標準偵錯器 此外GDB也是個具有移攜性的偵錯器 經過移攜需求的調修與重新編譯 如今許多的類UNIX作業系統上都可以使用GDB 而現有GDB所能支援除錯的程式語言有C C Pascal以及FORTRAN GNU Debugger開發者GNU計劃当前版本14 1 2023年12月3日 穩定版本 1 源代码库sourceware wbr org wbr git wbr binutils gdb wbr git操作系统类Unix系统 Windows类型调试工具许可协议GNU通用公共许可证网站gnu org software gdb 目录 1 歷史 2 技術細節 2 1 特點 2 2 遠端偵錯 2 3 現有限制 3 命令列使用的範例 4 過程範例 5 參考 6 外部連結歷史 编辑GNU Debugger最初是在1988年由理查德 马修 斯托曼 Richard Stallman 所撰寫 之後以GNU通用公共許可證 GNU General Public License GNU GPL 的授權方式將軟體釋出 因此GNU Debugger是一套自由軟體 釋出後的1990年 1993年間則由任職於Cygnus Solutions公司的約翰 吉爾摩 John Gilmore 英语 John Gilmore advocate 負責後續的軟體維護工作 技術細節 编辑特點 编辑 GDB具備各種偵錯功效 能針對電腦程式的執行進行追蹤與警告 使用GDB的除錯人員可以監督及修改程式的內部變數值 甚至監督與修改獨立於主程式運作外 以獨立個體型態呼用 呼叫使用 的函式 GDB能為多種不同處理器架構上執行的軟體進行偵錯 這些處理器架構包括 DEC COMPAQ HP的Alpha ARM的ARM Hitachi的H8 300 IBM的System 370 System 390 Intel的X86及X86 64 IA 64 Itanium Motorola 68000 MIPS的MIPS HP的PA RISC AIM联盟的PowerPC Hitachi Renesas ST的SuperH Sun的SPARC DEC COMPAQ HP的VAX 此外一些比較少人知的處理器也一樣受GDB支援 包括 AMD的A29K ARC的ARC Atmel的AVR Axis Communications的ETRAX CRIS D10V D30V Fujitsu的FR 30 FR V Intel的i960 Renesas的M32R Motorola的68HC11 Motorola的88000 Freescale的MCORE MN10200 MN10300 NS32K Stormy16 V850 以及Zilog的Z8000 此外更後續版本的GDB只會增加更多的處理器支援而不會短少 GDB的內部已具備了依據各種支援不同處理器的指令集所編譯成的模擬推演程式 Simulator 英语 Instruction Set Simulator 就連大眾少知少用的M32R V850等架構的處理器也都具備 遠端偵錯 编辑 nbsp GDB的一大特點是 除了具備傳統的本機端 近端偵錯外 也可透過接線 網路的通訊方式進行遠端性的遙控偵錯 GDB具有一種 遠端 Remote 模式 此種模式多半是在為嵌入式系統進行偵錯時使用 遠端操作指的是 GDB在一部機器內執行 而要進行偵錯的程式是在另一部機器上執行 接著欲偵錯的機器上會再加裝一個名為 Stub 的小程式 該程式能夠與另一端的GDB程式溝通 溝通的路徑可以是兩部機器間的串接式接線 英语 Serial Cable 也可以是支援TCP IP協定傳輸的各種網路 在TCP IP網路及協定上再加搭傳輸GDB專有的除錯操作用通訊協定 如此便能進行遠端偵錯 不僅GDB有遠端模式 KGDB也同樣具有遠端模式 KGDB主要是為執行中的Linux核心進行偵錯 而GDB則是主要是用在原代碼的層次 運用KGDB 負責核心程式的程式設計師可以將核心以近似於應用程式的除錯方式來偵錯 包括為核心程式碼設置中斷點 breakpoint 讓核心程式以步階方式逐行執行以及觀看變數值等 在某些架構的處理器中 會以硬體方式提供一些偵錯功用的寄存器 以及可以設定觀察點 Watchpoint 觀察點的功用是 當程式設計師指定的記憶體位址被執行到或訪問到時 觀察點即會去觸發 觸動一個中斷點 對此KGDB可以安裝在一部傳統機器上 並透過遠端模式使用另一部受偵錯機器上的硬體偵錯功效 同樣的兩部機器可用各種方式進行溝通 如串接式接線 乙太網路等 尤其在FreeBSD作業系統上還允許使用FireWire接線 並用直接內存訪問 Direct Memory Access DMA 的功效來協助遠端偵錯 現有限制 编辑 nbsp GDB的GUI化前端程式 Insight 過去稱GDBtk 圖中為 堆疊瀏覽器 部分 GDB運用上最明顯的限制是在 使用者介面 的部分 預設只有命令列介面 CLI 可用 而不具備較能親合上手 直覺操作的圖形化使用者介面 GUI 不過此一弱處也已經有幾個前端程式為其補強 例如DDD GDBtk Insight 页面存档备份 存于互联网档案馆 以及Emacs中的 GUD 模式 等 有了這些補強後 GDB在功效使用的便利性上就能夠與 整合發展環境中的偵錯功效使用 相接近 另外 有些偵錯工具 軟體 也被設計成能與GDB搭配使用 例如記憶體洩漏 memory leak 的偵測程式 命令列使用的範例 编辑gdb prog out debug prog out gdb run run過程範例 编辑以下是用GDB進行除錯的一段過程示範 欲進行偵錯的程式已在堆疊追蹤 英语 Stack trace 區內 GNU gdb Red Hat Linux 6 3 0 0 1 21rh Copyright 2004 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 i386 redhat linux gnu Using host libthread db library lib libthread db so 1 gdb run Starting program home sam programming crash Reading symbols from shared object read from target memory done Loaded system supplied DSO at 0xc11000 This program will demonstrate gdb Program received signal SIGSEGV Segmentation fault 0x08048428 in function 2 x 24 at crash c 22 22 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 0xa3e000 This program will demonstrate gdb 24 Program exited normally gdb quit 這個程式已處在執行階段 之後找出這個程式中會導致執行錯誤的段落 然後將對應處的原代碼用編輯器進行錯誤修訂 更正完成後用GNU 編譯器 GCC 重新編譯並再次執行 參考 编辑書籍 Debugging with GDB 在此暫譯成 用GDB進行除錯 出版 2002年 自由软件基金会 Free Software Foundation FSF ISBN 1 882114 88 4 作者 Richard M Stallman Roland Pesch Stan Shebs及其他所有參與成員外部連結 编辑 nbsp 自由软件主题 GDB的官方網站 页面存档备份 存于互联网档案馆 英文 GDB文件 Debugging with GDB 用GDB進行除錯 页面存档备份 存于互联网档案馆 線上HTML格式 折算成PDF格式則超過400頁 英文 深入GDB 英文 使用GDB進行C及C 程式語言的除錯 英文 用來替Linux核心進行除錯的GDB後端程式 KGDB 英文 Peter Jay Salzman所撰 如何更專精 善用GDB 英文 GDB內部結構 页面存档备份 存于互联网档案馆 The Architecture of Open Source Applications Volume II ISBN 9781105571817 英文 GDB 14 1 released 作者姓名字符串 Joel Brobecker 出版日期 2023年12月3日 检索日期 2023年12月3日 取自 https zh wikipedia org w index php title GNU侦错器 amp oldid 76780248, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。