?
目錄
🌈前言🌈
📁背景介紹
📁 使用
list?[行號] / [函數名]?
run/r
break/b? [行號] / [函數名]
info break
disable break
enable break
delete break [斷點編號]
next/n
step/s
continue/c
finish
print/p? [變量] / [表達式]
set [變量]
display? [變量名]
undisplay? [編號]
until
📁 總結
🌈前言🌈
? ? ? ? 本期【Linux雜貨鋪】將講解Linux中調試工具gdb的使用,各個參數的含義,如何在Linux中將代碼調試起來,以及各個參數對應的在IDE中的含義。
?
個人博客:秋刀魚的滋味@-CSDN博客
?
系列專欄:Linux雜貨鋪_秋刀魚的滋味@的博客-CSDN博客
📁背景介紹
? ? ? ? 在程序發布方式中,有兩種模式:debug模式 和 release模式。release模式下是不能進行調試的,所以在開發過程之中,使用的都是debug模式。
? ? ? ? Linux在使用 gcc/g++編譯出二進制程序時,默認使用的是release模式。
? ? ? ? 要使用gdb調試,必須在源代碼生成的二進制程序的時候,加上 -g 選項。
//test.c
#include <stdio.h>
int AddToTarget(int start , int end)
{int i = start;int sum = 0;for(;i <= end;i++){sum += i;}return sum;
}int main()
{printf("run begin...\n");int result = 0;result = AddToTarget(1,100);printf("resylt : %d \n",result);printf("run end...\n");return 0;
}
? ? ? ? 先創建test.c文件,寫入代碼。
????????通過gcc test.c -o test-debug -g命令,生成test-debug文件。
? ? ? ? 最后 gdb test-debug? 調試代碼
📁 使用
list?[行號] / [函數名]?
● list / l + 行號:顯示源代碼,接著上次的位置往下列,每次列10行,知道代碼尾。
● list / l + 函數名:列出某個函數的源代碼。
run/r
? ? ? ? 運行程序,從開始連續而非單步執行程序。在VS中,相當于F5。
break/b? [行號] / [函數名]
? ? ? ? 在某一行或者某某個函數開頭設置斷點。在VS中相當于F9。
info break
? ? ? ? 查看斷點。其中斷點是按編號操作的,編號按照創建順序給出。
disable break
? ? ? ? 禁用斷點。
? ? ? ? Enb表示斷點是否啟用,是的話參數為y,禁用為n。
enable break
? ? ? ? 啟用斷點。
delete break [斷點編號]
? ? ? ? 刪除斷點。????????
next/n
? ? ? ? 單條執行。但必須在程序run之后才能使用。run是調試,但不能一行的操作,所以必須配合斷點b來使用n。
? ? ? ? 在VS中next相當于F10,逐過程調試,不會進入函數體內部進行查看。
step/s
? ? ? ? 進入函數調用調試。在VS中,相當于F11
continue/c
? ? ? ? 從當前位置開始連續而非單步執行程序。相當于在執行到斷點后,run程序。
finish
? ? ? ? 執行到當前函數返回,然后等待接下來的命令。如我們step到函數內部,不想調試函數內部信息,只想查看函數執行完結果,可以使用finish,
print/p? [變量] / [表達式]
? ? ? ? 打印變量或者表達式的值。
set [變量]
? ? ? ? 修改變量的值。
display? [變量名]
? ? ? ? 跟蹤查看一個變量,你每次停下都顯示它的值。在VS中,相當于監視窗口。
undisplay? [編號]
? ? ? ? 取消先前的那些變量的跟蹤
until
? ? ? ? 跳轉到指定行,中間的代碼都是運行的。
📁 總結
? ? ? ? 以上,我們就對Linux中調試工具gdb做了講解,包括了如何生成可調式版的代碼,如何去調試等一系列內容,總體上來說非常簡單,只需要多加練習即可。
? ? ? ? 以上,就是本期【Linux雜貨鋪】的內容了,如果感覺對你有幫助,歡迎點贊,收藏,關注,Thanks?(・ω・)ノ。