Ubuntu1804下安裝gdb與使用


Ubuntu1804下安裝gdb與使用

1. Ubuntu1804下安裝gdb

sudo apt-get install gdb

查看安裝版本:

gdb --version

GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.

2.Ubuntu1804下gdb使用

1. GDB調試實例

  • 首先創建一個C語言文件test.c
    vim test.c
#include <stdio.h>
void ShowRevertNum(int iNum)
{
    
     while (iNum > 10)
     {
    
        printf("%d", iNum % 10);
        iNum = iNum / 10;
     }
     printf("%d\n", iNum);
}
int main(void)
{
    
     int iNum;
     printf("Please input a number :");
     scanf("%d", &iNum);
     printf("After revert : ");
     ShowRevertNum(iNum);
}

上面的代碼可以逆序輸出一個整型數,比如輸入123,則輸出321。

  • 使用gcc生成可執行文件並編譯運行
gcc -o test1 test.c
./test1

運行結果:

可以看到,在輸入100的時候輸出結果是錯誤的

  • 下面開始用GDB進行調試, 進入gdb
gcc -o test1 -g test.c
gdb test1
  • 輸入l查看代碼, 運行結果:

  • 下斷點

  • 發現問題

經過一步一步查看值的變化,發現iNum變成10了之后就不會再進入循環了,所以循環條件應該是大於等於10,我們要對錯誤進行修改,需要先退出gdb再進行對代碼的修改。

  • 修改程序,解決問題

    程序編譯運行后,輸入100,得到正確的結果

2. 內存出錯的GDB調試

Linux中,程序崩潰時,一般會產生core文件,記錄進程退出前的狀態,調試段錯誤問題,借助於該文件,可快速定位問題。

  • 首先讓Linux系統產生core文件
    新建一個C語言文件,輸入以下代碼:
#include<stdio.h>
int main(void)
{
    
int *p=0;
*p=1;
return 0;
}

然后輸入命令:

 ulimit –c 100

讓系統產生core文件,運行程序,讓程序崩潰,產生core文件,使用gdb配合core文件,定位問題

3.gdb的常用命令

命令 結果
file 裝入想要調試的可執行文件
kill 終止正在調試的程序
list 列出產生執行文件的源代碼的一部分
next 執行一行源代碼但不進入函數內部
step 執行一行源代碼而且進入函數內部
run 執行當前被調試的程序
c 繼續運行程序
quit 終止gdb
watch 使你能監視一個變量的值而不管它何時被改變
backtrace 棧跟蹤,查出代碼被誰調用
print 查看變量的值
make 使你能不退出gdb就可以重新產生可執行文件
shell 使你能不離開gdb就執行UNIX shell命令
whatis 顯示變量或函數類型
break 在代碼里設斷點,這將使程序執行到這里時被掛起
info break 顯示當前斷點清單,包括到達斷點處的次數等
info files 顯示被調試文件的詳細信息
info func 顯示所有的函數名稱
info local 顯示當函數中的局部變量信息
info prog 顯示被調試程序的執行狀態
delete [n] 刪除第n個斷點
disable[n] 關閉第n個斷點
enable[n] 開啟第n個斷點
ptype 顯示結構定義
set variable 設置變量的值
call name(args) 調用並執行名為name,參數為args的函數
Finish 終止當前函數並輸出返回值
return value 停止當前函數並返回value給調用者

參考:
https://www.i4k.xyz/article/Linux7985/52399439
https://wizardforcel.gitbooks.io/100-gdb-tips/content/set-pagination-off.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM