国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

在Linux中如何使用gdb調試C程序

系統 Linux
無論多么有經驗的程序員,開發的任何軟件都不可能完全沒有 bug。因此,排查及修復 bug 成為軟件開發周期中最重要的任務之一。有許多辦法可以排查 bug(測試、代碼自審等等),但是還有一些專用軟件(稱為調試器)可以幫助準確定位問題的所在,以便進行修復。

無論多么有經驗的程序員,開發的任何軟件都不可能完全沒有 bug。因此,排查及修復 bug 成為軟件開發周期中最重要的任務之一。有許多辦法可以排查 bug(測試、代碼自審等等),但是還有一些專用軟件(稱為調試器)可以幫助準確定位問題的所在,以便進行修復。

在Linux中如何使用gdb調試C程序

如果你是 C/C++ 程序員,或者使用 Fortran 和 Modula-2 編程語言開發軟件,那么你將會很樂意知道有這么一款優秀的調試器 - GDB - 可以幫你更輕松地調試代碼 bug 以及其它問題。在這篇文章中,我們將討論一下 GDB 調試器的基礎知識,包括它提供的一些有用的功能/選項。

在我們開始之前,值得一提的是,文章中的所有說明和示例都已經在 Ubuntu 14.04 LTS 中測試過。教程中的示例代碼都是 C 語言寫的;使用的 shell 為 bash(4.3.11);GDB 版本為 7.7.1。

GDB 調試器基礎

通俗的講,GDB 可以讓你看到程序在執行過程時的內部流程,并幫你明確問題的所在。我們將在下一節通過一個有效的示例來討論 GDB 調試器的用法,但在此之前,我們先來探討一些之后對你有幫助的基本要點。

首先,為了能夠順利使用類似 GDB 這樣的調試器,你必須以指定的方式編譯程序,讓編譯器產生調試器所需的調試信息。例如,在使用 gcc 編譯器(我們將在本教程之后的章節用它來編譯 C 程序示例)編譯代碼的時候,你需要使用 -g 命令行選項。

想要了解 gcc 編譯器手冊頁中關于 -g 命令行選項相關的內容,請看這里。

下一步,確保在你的系統中已經安裝 GDB 調試器。如果沒有安裝,而且你使用的是基于 Debian 的系統(如 Ubuntu),那么你就可以使用以下命令輕松安裝該工具:

  1. sudo apt-get install gdb 

在其他發行版上的安裝方法,請看這里。

現在,當你按照上述的方式編譯完程序(gcc -g 命令行選項),同時也已經安裝好 GDB 調試器,那么你就可以使用以下命令讓程序在調試模式中運行:

  1. gdb [可執行程序的名稱] 

這樣做會初始化 GDB 調試器,但你的可執行程序此時還不會被啟動。在這個時候你就可以定義調試相關的設置。例如,你可以在特定行或函數中設置一個斷點讓 GDB 在該行暫停程序的執行。

接著,為了啟動你的程序,你必須輸入執行以下 gdb 命令:

  1. run 

在這里,值得一提的是,如果你的程序需要一些命令行參數,那么你可以在這里指定這些參數。例如:

  1. run [參數] 

GDB 提供了很多有用的命令,在調試的時候總是能派的上用場。我們將在下一節討論其中一部分命令。

GDB 調試器用例

現在我們對 GDB 及其用法有了基本的概念。因此,讓我們舉例來應用所學的知識。這是一段示例代碼:

  1. #include 
  2.  
  3. int main()
  4. {
  5.  int out = 0, tot = 0, cnt = 0; 
  6. int val[] = {5, 54, 76, 91, 35, 27, 45, 15, 99, 0}; 
  7.  
  8. while(cnt < 10) 
  9. {
  10.  out = val[cnt]; 
  11. tot = tot + 0xffffffff/out
  12. cnt++; 
  13. }
  14.  
  15.  printf("\n Total = [%d]\n", tot); 
  16. return 0;

簡單說明一下這段代碼要做什么事。獲取 val 數組中每一個值,將其賦值給 out 變量,然后將 tot 之前的值與 0xffffffff/out 的結果值累加,賦值給 tot 變量。

這里遇到的問題是,當執行這段代碼編譯后的可執行程序時,產生以下錯誤:

  1. $ ./gdb-test
  2. Floating point exception (core dumped) 

因此,要調試這段代碼,***步是使用 -g 選項編譯程序。命令如下:

  1. gcc -g -Wall gdb-test.c -o gdb-test 

接著,讓我們運行 GDB 調試器并指定要調試的可執行程序。命令如下:

  1. gdb ./gdb-test 

現在,我剛才得到的錯誤是 Floating point exception,大部分人可能已經知道,這是因為 n % x,當 x 為 0 時導致的錯誤。所以,考慮到這一點,我在 11 行代碼除法運算的位置處添加了一個斷點。如下:

  1. (gdb)&;break 11 

注意 (gdb) 是調試器的提示信息,我只輸入了 break 11 命令。

現在,讓 GDB 開始運行程序:

  1. run 

當斷點***次被***時,GDB 顯示如下輸出:

 

  1. Breakpoint 1, main () at gdb-test.c:11  
  2. 11 tot = tot + 0xffffffff/out 
  3. (gdb) 

正如你所看到的那樣,調試器會顯示斷點所在的行代碼。現在,讓我們打印出此時 out 的值。如下:

  1. (gdb) 
  2. print out
  3. $1 = 5(gdb) 

如上所示,值 5 被打印出來了。這個時候一切都還是正常的。讓調試器繼續執行程序直到***下一個斷點,可以通過使用 c 命令來完成:

重復上述操作,直到 out 值變為 0 時。

 

  1. ...  
  2. ...  
  3. ...  
  4. Breakpoint 1, main () at gdb-test.c:11  
  5. 11 tot = tot + 0xffffffff/out 
  6. (gdb) print out  
  7. $2 = 99  
  8. (gdb) c  
  9. Continuing. 
  10.  
  11. Breakpoint 1, main () at gdb-test.c:  
  12. 1111 tot = tot + 0xffffffff/out 
  13. (gdb) print out  
  14. $3 = 0  
  15. (gdb) 

現在,為了進一步確認問題,我使用 GDB 的 s(或 step) 命令代替 c 命令。因為,我只想讓當前程序在第 11 行之后暫停,再一步步執行,看看這個時候是否會發生崩潰。

以下是執行之后輸出信息:

 

  1. (gdb) s 
  2.  
  3. Program received signal SIGFPE, Arithmetic exception.  
  4. 0x080484aa in main () at gdb-test.c:  
  5. 1111 tot = tot + 0xffffffff/out

是的,如上輸出的***行內容所示,這就是拋出異常的地方。當我再次嘗試運行 s 命令時,問題最終也得到了確認:

 

  1. (gdb) s 
  2.  
  3. Program terminated with signal SIGFPE, Arithmetic exception.  
  4. The program no longer exists. 

通過這種方式,你就可以使用 GDB 調試你的程序。

總結

GDB 提供了很多功能供用戶研究和使用,在這里,我們僅僅只介紹了很少一部分內容。通過 GDB 的手冊頁可以進一步了解這個工具,當你在調試代碼的時候,嘗試使用一下它。GDB 調試器有一定的學習難度,但是它很值得你下功夫學習。

責任編輯:未麗燕 來源: Linux中國
相關推薦

2010-06-04 17:48:20

Linux編程工具

2021-03-15 06:23:40

GDB調試代碼編程語言

2015-08-14 09:21:09

gdb工具調試 Go

2025-07-02 09:16:40

2025-10-20 04:22:00

2025-08-21 10:01:22

2021-06-04 05:18:29

ARM程序Gdbserver

2023-02-02 09:33:04

Linux控制臺程序

2021-07-28 08:53:53

GoGDB調試

2018-01-08 15:30:18

Linux命令date

2014-09-25 11:08:17

ECLLispC語言

2011-07-27 16:18:42

Objective-c 協議

2024-10-11 14:42:59

2010-03-26 15:41:39

Python腳本

2021-07-05 11:00:43

GDB棧空間編程語言

2010-11-25 10:05:22

Visual StudSilverlightWCF

2022-10-08 06:43:15

Linux系統終端

2011-01-14 12:53:45

Linux PPCEclipseC

2021-02-20 11:04:40

C++VS代碼調試

2024-07-26 00:00:12

點贊
收藏

51CTO技術棧公眾號

欧美美女一区二区| 欧美日韩中文字幕综合视频| 91精品店在线| 成人免费在线观看av| 国产精品五月天| 国产精品久久一区二区三区| 污污视频网站免费观看| 国产欧美日本| 国产色视频一区| 2021av在线| 欧美日韩国产首页| 精品久久久久久久久久岛国gif| 日韩在线视频观看| 亚洲 欧美 另类人妖| 六月丁香综合在线视频| 国产特黄在线| 日产日韩在线亚洲欧美| 国产伦子伦对白在线播放观看| 9色精品在线| 日韩视频免费中文字幕| 污网站在线观看视频| 日韩国产欧美视频| 国产一区二区在线免费视频| 久久久久欧美精品| 久久在线免费视频| 黄色在线播放网站| 亚洲码在线观看| 九九精品在线| 欧美一卡2卡3卡4卡无卡免费观看水多多| 欧美va在线观看| 国内外成人免费激情在线视频网站| 丰满的护士2在线观看高清| 精品国产一区二区精华| 久久wwww| 日本久久久久久久| 亚洲91中文字幕无线码三区| 色综合久久综合网97色综合| 日日橹狠狠爱欧美超碰| 国产精品区一区二区三区| 免费羞羞视频| 欧美日韩国产在线播放网站| 日本三级在线观看网站| 亚洲人成在线观看网站高清| 成人性生交大片免费看96| 国产综合香蕉五月婷在线| 日韩高清一级片| 九色porny自拍| 精品裸体舞一区二区三区| 日韩黄色碟片| 久久综合九色99| 国产精品理论片| 色老头在线一区二区三区| 97视频在线观看成人| 奇米色一区二区三区四区| 性色a∨人人爽网站| 久久精品99久久久久久久久| 亚洲三级影院| 国产又黄又猛又粗| 日韩国产精品一区| 极品一区美女高清| 国产精品videossex国产高清 | 在线一区二区三区四区| 亚洲.国产.中文慕字在线| 日韩高清不卡在线| caopor在线视频| 欧美亚日韩国产aⅴ精品中极品| 日韩欧美2区| 欧美少妇一区| 一区精品在线播放| 四虎影视国产精品| 好看的日韩精品视频在线| 中文字幕最新精品| 蜜桃精品视频在线| 在线欧美一级视频| 日韩有码在线视频| 久久福利一区| 四虎精品一区二区永久在线观看| 亚洲国产精品va在线| 你懂的亚洲视频| 韩日午夜在线资源一区二区| 福利电影一区二区三区| 一级片免费在线| 欧美成年人网站| 国产91高潮流白浆在线麻豆 | 成人h动漫精品| 国产奶头好大揉着好爽视频| 久久成人在线视频| 久久综合av免费| 日本高清精品| xxxx影院| 男女无套免费视频网站动漫| 亚洲电影第1页| 伊人婷婷欧美激情| 日日夜夜一区| 国产精品久久国产精麻豆99网站| 99re6热只有精品免费观看| 橘梨纱av一区二区三区在线观看| 久久99精品久久久久久青青日本| 不卡av免费在线观看| 电影天堂国产精品| 96久久久久久| 2019国产精品视频| 色综合咪咪久久| 草草在线视频| 国产精品-区区久久久狼| 亚洲福利视频网站| 国产精品婷婷午夜在线观看| 毛片中文在线观看| 色综合桃花网| 国产传媒一区| 欧美激情一区二区在线| 国产精品扒开做爽爽爽的视频| 欧美精品一二区| 国产精品一卡二| 成人ww免费完整版在线观看| 91精品久久久久久久久久另类 | 亚洲欧美制服另类日韩| 欧美精品一区二区三区久久久竹菊| 日韩av手机版| 日韩精品视频在线观看网址| 午夜在线精品| 成人在线免费观看| 国产女人18毛片水18精品| 国产精品久久久久一区二区三区| 日本一区二区三区中文字幕| 成人国产在线看| 亚洲精品视频在线观看视频| 久久精品国产99国产精品| 日本无删减在线| 久久国产日韩欧美| 91精品欧美久久久久久动漫| 亚洲国产导航| 蜜桃视频网站在线观看| 成人黄色av网站| 欧美日韩国产一中文字不卡| 精品视频免费| 亚洲一区二区三区成人| 亚洲xxxx3d| 欧美日韩免费一区二区三区视频| 亚洲网站视频| 3d玉蒲团在线观看| 亚洲午夜精品久久| 亚洲欧洲中文天堂| 久久视频一区二区| 日韩精品社区| 成r视频免费观看在线播放| 亚洲综合日韩在线| 在线播放91灌醉迷j高跟美女 | 日本成人在线视频网站| 亚洲激情中文1区| wwwwxxxxx欧美| 99精品国产91久久久久久 | 日韩高清在线不卡| 日韩在线激情视频| 美女久久一区| 污视频免费在线观看| 免费看污久久久| 91国偷自产一区二区开放时间| 99re国产精品| 日本成人在线网站| 免费观看美女裸体网站| 欧美国产视频一区二区| 粉嫩一区二区三区在线看| 57pao成人永久免费| 黄色成人在线免费观看| 国产精品成人免费视频| 久久久精品2019中文字幕神马| 欧美在线免费观看视频| 亚洲欧美日韩国产综合| 国产69精品久久久久毛片| 伊人久久大香线蕉av不卡| 99久久综合| 久久精品免费网站| www.xxxx欧美| 亚洲综合色视频| 午夜在线a亚洲v天堂网2018| 免费视频成人| 日韩欧美中文一区| 亚洲视频第一页| 99久久久久| 91超碰在线播放| 污污视频网站免费观看| 亚洲资源在线看| 亚洲激情在线视频| 亚洲色图欧美激情| 日韩国产欧美在线观看| 亚洲性视频在线| 色网站免费在线观看| 丰满人妻中伦妇伦精品app| 成人激情视频免费在线| 亚洲无亚洲人成网站77777| 亚洲国产综合在线| 国产毛片精品国产一区二区三区| 精品中文字幕一区二区三区av| 国产黄色在线免费观看| 久久www视频| 国产精品一区二区不卡视频| 久久99久国产精品黄毛片入口| 欧美一区二区网站| 亚洲一区二区欧美日韩|