GDB調試c++代碼相關資料

基礎教學:

https://www.cnblogs.com/chenmingjun/p/8280889.html

https://blog.csdn.net/Stone_OverLooking/article/details/78493331?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159296170919195162552731%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159296170919195162552731&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_ctr_v4-1-78493331.ecpm_v1_rank_ctr_v4&utm_term=gdb%E8%B0%83%E8%AF%95c%2B%2B

https://blog.csdn.net/qq_33053671/article/details/106410641?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

大型工程:(針對調試CMakeLists.txt文件)
可打開gdb圖形界面調試:

gdb a.out --tui

調試CMakeLists.txt文件前提是在CMakeLists.txt文件中要添加下面這一行:

#dubug 模式------------------這個非常重要,否則無法進入斷點
set (CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -g")

 

GDB常用指令

一、基本指令
編程設置:1.需要加-g,不能有-s,如g++ -g main.cpp
常用指令
(gdb)gdb e(或者輸入gdb) (gdb)file e //進入gdb,執行e文件
(gdb)info breakpoints //可使用info查看斷點相關的信息
(gdb)break 7 //以行號設置斷點
(gdb)break function_name //以函數名設置斷點
(gdb)clear 行號 //刪除這行的斷點
(gdb)clear 函數名 //刪除該函數的斷點
(gdb)delete breakpoints n //刪除第n次(指定編號)設置的斷點
(gdb)clear //刪除程序中所有的基於行設置的斷點
(gdb)delete //刪除程序中所有的斷點
(gdb)r //執行程序
(gdb)n //單步調試

(gdb)s //進入函數內部調試
(gdb)c //執行到下一個斷點
(gdb)print 變量或表達式 //打印變量或表達式當前的值。
(gdb)print 變量=值 //對變量進行賦值
(gdb)whatis 變量或表達式 //顯示變量類型
(gdb)set variable 變量=值 //變量賦值

二、斷點管理
1.以行號設置斷點
(gdb)break 7
(gdb)run
2.以函數名設置斷點
(gdb)break function_name
(gdb)run
3.以條件表達式設置斷點
(gdb)break 7 if i99
(gdb)run
4.另一種,以表達式設置斷點的方法
(gdb)watch i99
這個命令必須在變量i被定義之後纔會成功運行,爲了解決這個問題,首先在變量 i 被定義的後一行設置中斷,然後使用run命令運行程序,程序暫停後就可以使用watch i==99設置斷點了。
##############################
單步執行
(gdb)next
#############################
查看當前設置的斷點信息
(gdb)info breakpoints
###############################
使中斷失效(斷點仍然存在)或有效
(gdb)info breakpoints
(gdb)disable b_id //使中斷失效,b_id 爲中斷編號
(gdb)info breakpoints
(gdb)enable b_id //使中斷有效,b_id 爲中斷編號
(gdb)info breakpoints
##############################
刪除斷點
clear : 刪除程序中所有的斷點
clear 行號 : 刪除這行的斷點
clear 函數名 : 刪除該函數的斷點
delete b_id1 b_id2 … : 刪除指定編號的斷點
##################################
查看和設置變量值
1.print命令
print 變量或表達式:打印變量或表達式當前的值。
print 變量=值:對變量進行賦值。
print 表達式@要打印的值的個數n:打印以表達式開始的n個數
2.whatis命令:顯示某個變量或表達式值的數據類型
whatis 變量或表達式
例子:

3.set命令:給變量賦值
set variable 變量=值
【提示】set命令還可以針對遠程調試進行設置,可以用來設置gdb一行的字符數等。
4.多線程

查看線程的一些信息
1.查看進程:info inferiors
2.查看線程:info threads
3.查看線程棧結構:bt
4.切換線程:thread n(n代表第幾個線程)
5.只運行當前進程:set scheduler-locking on
6.所有線程並行:set scheduler-locking off
7.切換線程 :thread ID(1,2,3…)
8.thread apply all command :讓所有線程執行命令command(比如thread apply all bt)

gdb介紹:(下面這條鏈接介紹GDB也很詳細)

https://blog.csdn.net/u011068702/article/details/53925415?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159341954719725222443097%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159341954719725222443097&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-53925415.ecpm_v1_rank_ctr_v4&utm_term=gdb%E8%B0%83%E8%AF%95%E5%91%BD%E4%BB%A4

https://blog.csdn.net/sunzhao1000/article/details/103353631?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159341879019724839211292%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159341879019724839211292&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_ctr_v4-1-103353631.ecpm_v1_rank_ctr_v4&utm_term=gdb+%E8%B0%83%E8%AF%95CMakeLists.txt

linux下cmake編譯C++代碼爲可執行文件,多版本

https://blog.csdn.net/sunzhao1000/article/details/103293877

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章