面試八股文對(duì)校招的用處有多大?GDB篇
前言
1.本系列面試八股文的題目及答案均來自于網(wǎng)絡(luò)平臺(tái)的內(nèi)容整理,對(duì)其進(jìn)行了歸類整理,在格式和內(nèi)容上或許會(huì)存在一定錯(cuò)誤,大家自行理解。內(nèi)容涵蓋部分若有侵權(quán)部分,請(qǐng)后臺(tái)聯(lián)系,及時(shí)刪除。
2.本系列發(fā)布內(nèi)容分為12篇 分別是:
GDB
設(shè)計(jì)模式
操作系統(tǒng)
系統(tǒng)編程
網(wǎng)絡(luò)原理
網(wǎng)絡(luò)編程
mysql
redis
服務(wù)器
RPG
本文為第三篇,后續(xù)會(huì)陸續(xù)更新。 共計(jì)200+道八股文。
3.本系列的200+道為整理的八股文系列的一小部分。完整整理完的八股文面試題共計(jì)1000+道,100W字左右,體量太大,故此處放至百度云盤鏈接: https://pan.baidu.com/s/1IOxQs0ifbSPGgxK7Yz7BtQ?pwd=zl1i
提取碼:zl1i 需要的同學(xué)自取即可。
4.八股文對(duì)于面試的同學(xué)來說僅作為參考使用,不能作為面試上岸的唯一準(zhǔn)備,還是要結(jié)合自身的技術(shù)能力和項(xiàng)目,同步發(fā)育。
最后祝各位同學(xué)都能拿到自己滿意的offer,成功上岸!
三、GDB
01.怎么debug,怎么看內(nèi)存泄漏。
如何 Debug:
- 打印日志:在關(guān)鍵處添加輸出語句,打印變量的值、函數(shù)執(zhí)行狀態(tài)等信息,可以快速定位代碼問題。
- 斷點(diǎn)調(diào)試:在關(guān)鍵函數(shù)或代碼塊設(shè)置斷點(diǎn),通過單步執(zhí)行來查看變量的值和程序的執(zhí)行過程,可以更細(xì)致地定位問題。
- 使用工具:常用的工具包括 GDB、Valgrind 等。GDB 可以進(jìn)行斷點(diǎn)調(diào)試和查看內(nèi)存信息;Valgrind 可以檢測(cè)內(nèi)存泄漏、非法內(nèi)存訪問等問題。
如何查看內(nèi)存泄漏:
- 使用 Valgrind 工具中的 Memcheck 功能,運(yùn)行程序時(shí)添加參數(shù) --tool=memcheck,然后會(huì)自動(dòng)分析出哪些地方存在內(nèi)存泄漏。
- 在編寫代碼時(shí),在申請(qǐng)內(nèi)存后必須要釋放該內(nèi)存,這樣可以避免內(nèi)存泄漏產(chǎn)生。在使用 malloc() 和 new 申請(qǐng)堆空間時(shí)一定要配套使用 free() 和 delete 來釋放空間。
- 對(duì)于 C++ 中容器類 vector、map 等對(duì)象,在不需要使用時(shí)及時(shí)清空或刪除其中元素和對(duì)象指針,避免其持有無用資源導(dǎo)致內(nèi)存泄漏。
- 對(duì)于長(zhǎng)時(shí)間運(yùn)行的進(jìn)程應(yīng)當(dāng)注意監(jiān)控系統(tǒng)資源情況,并及時(shí)排查并解決可能存在的內(nèi)存泄漏問題。
02.gdb 使用 -> 多線程程序切換到某線程棧幀 -> 如何查看寄存器值
在 gdb 中查看某個(gè)線程的寄存器值,可以使用以下命令:
- 先使用 info threads 命令查看當(dāng)前所有線程的 ID。
- 然后使用 thread 命令切換到指定線程。比如要切換到線程號(hào)為 3 的線程,則輸入 thread 3。
- 使用 info frame 命令可以查看當(dāng)前棧幀信息,其中包括函數(shù)名、參數(shù)、局部變量等信息。如果需要查看寄存器值,則需要進(jìn)入某個(gè)具體的棧幀。
- 使用 up 或 down 命令可以在不同的棧幀之間切換。每次執(zhí)行 up 或 down 命令,都會(huì)將當(dāng)前位置切換到上層或下層的棧幀。
- 在特定的棧幀中使用 info registers 或者 i r 命令即可查看當(dāng)前寄存器的值。其中,i r 可以縮寫為 ireg 等幾種形式。
總之,在 gdb 中查看多線程程序中某個(gè)線程的寄存器值需要先通過 thread 切換到該線程,然后再進(jìn)入對(duì)應(yīng)棧幀并使用相關(guān)命令進(jìn)行操作。
03.怎么分析C++的core文件
一、概述
使用c++開發(fā)程序時(shí),經(jīng)常會(huì)遇到運(yùn)行中core的情況,如果是偶發(fā)的就更加難以定位,本文講解如何使用gdb進(jìn)行core位置的分析定位。
二、打開coredump文件生成
# 1. 支持產(chǎn)生coredump
# 查看當(dāng)前設(shè)置
cat /etc/security/limits.conf|grep core
ulimit -c # 如果是unlimited,說明設(shè)置成功
# 設(shè)置(最好加到業(yè)務(wù)啟動(dòng)命令里)
ulimit -c unlimited
# 2.控制core文件保存位置和文件名格式
# 查看目前使用的方式
cat /proc/sys/kernel/core_pattern
# 修改生成位置和命名規(guī)則(必須bash -c 'echo xxx'方式,不能通過vi修改)
sudo bash -c 'echo "/coredump/%e_%p_%t.core" > /proc/sys/kernel/core_pattern'
# 命名格式參數(shù):
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加當(dāng)前uid
%g - insert current gid into filename 添加當(dāng)前gid
%s - insert signal that caused the coredump into the filename 添加導(dǎo)致產(chǎn)生core的信號(hào)
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成時(shí)的unix時(shí)間
%h - insert hostname where the coredump happened into filename 添加主機(jī)名
%e - insert coredumping executable name into filename 添加命令名
# qnx系統(tǒng)下沒有/proc/sys/kernel/core_pattern文件,需要用命令指定保存目錄
dumper -d /coredump/
# 3.測(cè)試讓程序產(chǎn)生一個(gè)coredump
kill -6 $pid
kill -11 $pid
三、使用gdb分析core
1、使用gdb分析coredump文件
gdb ./bin/ipc_server ipc_server.core # 必須使用與core時(shí)一樣的bin/lib文件
(gdb) set args zmq 6000 # 指定運(yùn)行時(shí)的參數(shù)
(gdb) bt # backtrace顯示當(dāng)前調(diào)用堆棧
(gdb) q # 退出gdb
2、使用gdb調(diào)試bin文件
gdb -q ./bin/ipc_server
(gdb) set args zmq 6000 # 指定運(yùn)行時(shí)的參數(shù)
(gdb) r # run運(yùn)行程序直到遇到 結(jié)束或者遇到斷點(diǎn)
(gdb) bt # backtrace顯示當(dāng)前調(diào)用堆棧
(gdb) quit # 退出gdb
04.GDB有哪些命令
1 啟動(dòng)gdb
1.1 運(yùn)行時(shí)調(diào)試可執(zhí)行程序
gdb
attach <pid>
或者
gdb attach <pid>
1.2 運(yùn)行結(jié)束調(diào)試core文件
gdb <program> <core dump file>
2 gdb交互命令
2.1 運(yùn)行
run (r): 其作用是運(yùn)行程序,當(dāng)遇到斷點(diǎn)后,程序會(huì)在斷點(diǎn)處停止運(yùn)行,等待用戶輸入下一步的命令。
continue (c): 繼續(xù)執(zhí)行,到下一個(gè)斷點(diǎn)處(或運(yùn)行結(jié)束)
next (n): 單步跟蹤程序,當(dāng)遇到函數(shù)調(diào)用時(shí),也不進(jìn)入此函數(shù)體;此命令同 step 的主要區(qū)別是,step 遇到用戶自定義的函數(shù),將步進(jìn)到函數(shù)中去運(yùn)行,而 next 則直接調(diào)用函數(shù),不會(huì)進(jìn)入到函數(shù)體內(nèi)。
step (s): 單步調(diào)試如果有函數(shù)調(diào)用,則進(jìn)入函數(shù);與命令n不同,n是不進(jìn)入調(diào)用的函數(shù)的
until: 當(dāng)你厭倦了在一個(gè)循環(huán)體內(nèi)單步跟蹤時(shí),這個(gè)命令可以運(yùn)行程序直到退出循環(huán)體。
until+line: 運(yùn)行至某行,不僅僅用來跳出循環(huán)
finish: 運(yùn)行程序,直到當(dāng)前函數(shù)完成返回,并打印函數(shù)返回時(shí)的堆棧地址和返回值及參數(shù)值等信息。
call func(args):調(diào)用程序中可見的函數(shù),并傳遞“參數(shù)”,如:call gdb_test(55)
quit (q): 退出gdb
2.2 斷點(diǎn)
break/breakpoints 可以簡(jiǎn)寫為b
break n : 在第n行處設(shè)置斷點(diǎn) //可以帶上代碼路徑和代碼名稱: b xxx.cpp:578
b fn1 if a>b: 條件斷點(diǎn)設(shè)置
break func: 在函數(shù)func()的入口處設(shè)置斷點(diǎn),如:break cb_button
delete n: 刪除第n個(gè)斷點(diǎn)
disable n: 暫停第n個(gè)斷點(diǎn)
enable n: 開啟第n個(gè)斷點(diǎn)
clear n: 清除第n行的斷點(diǎn)
info breakpoints : 顯示當(dāng)前程序的斷點(diǎn)設(shè)置情況
delete breakpoints:清除所有斷點(diǎn)
2.3 查看代碼
list (l): 作用就是列出程序的源代碼,默認(rèn)每次顯示10行,再次輸入將接著上一次 list 命令的,輸出下邊的內(nèi)容。
list line: 將顯示當(dāng)前文件以“行號(hào)”為中心的前后10行代碼,如:list 12
list func: 將顯示“函數(shù)名”所在函數(shù)的源代碼,如:list main
2.4 打印
print 表達(dá)式 (p 表達(dá)式):其中“表達(dá)式”可以是任何當(dāng)前正在被測(cè)試程序的有效表達(dá)式,比如當(dāng)前正在調(diào)試C語言的程序,那么“表達(dá)式”可以是任何C語言的有效表達(dá)式,包括數(shù)字,變量甚至是函數(shù)調(diào)用。
print a: 將顯示 a 的值
print ++a: 將把 a 中的值加1,并顯示出來
print gdb_test(a): 將以變量 a 作為參數(shù)調(diào)用 gdb_test() 函數(shù)
display 表達(dá)式: 在單步運(yùn)行時(shí)將非常有用,使用display命令設(shè)置一個(gè)表達(dá)式后,它將在每次單步進(jìn)行指令后,緊接著輸出被設(shè)置的表達(dá)式及值。如: display a
watch 表達(dá)式: 設(shè)置一個(gè)監(jiān)視點(diǎn),一旦被監(jiān)視的“表達(dá)式”的值改變,gdb將強(qiáng)行終止正在被調(diào)試的程序。如: watch a
whatis : 查詢變量或函數(shù)
info function: 查詢函數(shù)
info locals: 顯示當(dāng)前堆棧頁的所有變量
輸出格式 一般來說,GDB會(huì)根據(jù)變量的類型輸出變量的值。但你也可以自定義GDB的輸出的格式。
x 按十六進(jìn)制格式顯示變量。
d 按十進(jìn)制格式顯示變量。
u 按十六進(jìn)制格式顯示無符號(hào)整型。
o 按八進(jìn)制格式顯示變量。
t 按二進(jìn)制格式顯示變量。
a 按十六進(jìn)制格式顯示變量。
c 按字符格式顯示變量。
f 按浮點(diǎn)數(shù)格式顯示變量。
p/format arg
2.5 查詢
where/bt : 當(dāng)前運(yùn)行的堆棧列表
bt backtrace : 顯示當(dāng)前調(diào)用堆棧
up/down : 改變堆棧顯示的深度
set args 參數(shù): 指定運(yùn)行時(shí)的參數(shù)
show args: 查看設(shè)置好的參數(shù)
info program: 來查看程序的是否在運(yùn)行,進(jìn)程號(hào),被暫停的原因。
2.6 分割窗口
ayout: 用于分割窗口,可以一邊查看代碼,一邊測(cè)試:
layout src: 顯示源代碼窗口
layout asm: 顯示反匯編窗口
layout regs: 顯示源代碼/反匯編和CPU寄存器窗口
layout split: 顯示源代碼和反匯編窗口
Ctrl + L: 刷新窗口
2.7 變量和表達(dá)式
print和許多GDB的命令一樣,可以接受一個(gè)表達(dá)式,GDB會(huì)根據(jù)當(dāng)前的程序運(yùn)行的數(shù)據(jù)來計(jì)算這個(gè)表達(dá)式,既然是表達(dá)式,那么就可以是當(dāng)前程序運(yùn)行中的const常量、變量、函數(shù)等內(nèi)容。可惜的是GDB不能使用你在程序中所定義的宏。在表達(dá)式中,有幾種GDB所支持的操作符:
@ : 是一個(gè)和數(shù)組有關(guān)的操作符
:: : 指定一個(gè)在文件或是一個(gè)函數(shù)中的變量
eg : p 'f2.c'::x
{} : 表示一個(gè)指向內(nèi)存地址的類型為type的一個(gè)對(duì)象
需要注意的是,如果你的程序編譯時(shí)開啟了優(yōu)化選項(xiàng),那么在用GDB調(diào)試被優(yōu)化過的程序時(shí),可能會(huì)發(fā)生某些變量不能訪問,或是取值錯(cuò)誤碼的情況。這個(gè)是很正常的,因?yàn)閮?yōu)化程序會(huì)刪改你的程序,整理你程序的語句順序,剔除一些無意義的變量等,所以在GDB調(diào)試這種程序時(shí),運(yùn)行時(shí)的指令和你所編寫指令就有不一樣,也就會(huì)出現(xiàn)你所想象不到的結(jié)果。對(duì)付這種情況時(shí),需要在編譯程序時(shí)關(guān)閉編譯優(yōu)化。
2.8 數(shù)組
有時(shí)候,你需要查看一段連續(xù)的內(nèi)存空間的值。比如數(shù)組的一段,或是動(dòng)態(tài)分配的數(shù)據(jù)的大小。你可以使用GDB的“@”操作符,“@”的左邊是第一個(gè)內(nèi)存的地址的值,“@”的右邊則你你想查看內(nèi)存的長(zhǎng)度。 @的左邊是數(shù)組的首地址的值,也就是變量array所指向的內(nèi)容,右邊則是數(shù)據(jù)的長(zhǎng)度,其保存在變量len中,其輸出結(jié)果,大約是下面這個(gè)樣子的:
p array@len
$1 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40}
2.9 查看內(nèi)存
你可以使用examine命令(簡(jiǎn)寫是x)來查看內(nèi)存地址中的值 n、f、u是可選的參數(shù)。 n 是一個(gè)正整數(shù),表示顯示內(nèi)存的長(zhǎng)度,也就是說從當(dāng)前地址向后顯示幾個(gè)地址的內(nèi)容。 f 表示顯示的格式,參見上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。 u 表示從當(dāng)前地址往后請(qǐng)求的字節(jié)數(shù),如果不指定的話,GDB默認(rèn)是4個(gè)bytes。u參數(shù)可以用下面的字符來代替,b表示單字節(jié),h表示雙字節(jié),w表示四字節(jié),g表示八字節(jié)。當(dāng)我們指定了字節(jié)長(zhǎng)度后,GDB會(huì)從指內(nèi)存定的內(nèi)存地址開始,讀寫指定字節(jié),并把其當(dāng)作一個(gè)值取出來。
x/3uh 0x54320 :表示,從內(nèi)存地址0x54320讀取內(nèi)容,h表示以雙字節(jié)為一個(gè)單位,3表示三個(gè)單位,u表示按十六進(jìn)制顯示。
2.10 自動(dòng)顯示
你可以設(shè)置一些自動(dòng)顯示的變量,當(dāng)程序停住時(shí),或是在你單步跟蹤時(shí),這些變量會(huì)自動(dòng)顯示。相關(guān)的GDB命令是display(disp)。
display/fmt expr
display/fmt $addr
//expr是一個(gè)表達(dá)式,fmt表示顯示的格式,addr表示內(nèi)存地址,當(dāng)你用display設(shè)定好了一個(gè)或多個(gè)表達(dá)式后,只要你的程序被停下來,GDB會(huì)自動(dòng)顯示你所設(shè)置的這些表達(dá)式的值。
刪除自動(dòng)顯示,dnums意為所設(shè)置好了的自動(dòng)顯式的編號(hào)。如果要同時(shí)刪除幾個(gè),編號(hào)可以用空格分隔,如果要?jiǎng)h除一個(gè)范圍內(nèi)的編號(hào),可以用減號(hào)表示(如:2-5)。
undisplay dnums
delete display dnums
disable和enalbe不刪除自動(dòng)顯示的設(shè)置,而只是讓其失效和恢復(fù)。
disable display
enable display
查看display設(shè)置的自動(dòng)顯示的信息。GDB會(huì)打出一張表格,向你報(bào)告當(dāng)然調(diào)試中設(shè)置了多少個(gè)自動(dòng)顯示設(shè)置,其中包括,設(shè)置的編號(hào),表達(dá)式,是否enable。
info display
2.11 設(shè)置顯示選項(xiàng)
GDB中關(guān)于顯示的選項(xiàng)比較多,這里只例舉大多數(shù)常用的選項(xiàng)。
set print address on/off : 開/關(guān)地址輸出,當(dāng)程序顯示函數(shù)信息時(shí),GDB會(huì)顯出函數(shù)的參數(shù)地址,系統(tǒng)默認(rèn)為打開的。
show print address : 查看當(dāng)前地址顯示選項(xiàng)是否打開
set print array on/off : 開/關(guān)數(shù)組顯示,打開后當(dāng)數(shù)組顯示時(shí),每個(gè)元素占一行,如果不打開的話,每個(gè)元素則以逗號(hào)分隔。這個(gè)選項(xiàng)默認(rèn)是關(guān)閉的。
show print array: 查看當(dāng)前數(shù)組顯示選項(xiàng)是否打開。
set print null-stop on/off: 如果打開了這個(gè)選項(xiàng),那么當(dāng)顯示字符串時(shí),遇到結(jié)束符則停止顯示。這個(gè)選項(xiàng)默認(rèn)為off。
set print pretty on/off: 如果打開printf pretty這個(gè)選項(xiàng),那么當(dāng)GDB顯示結(jié)構(gòu)體時(shí)會(huì)比較漂亮。
set print sevenbit-strings on/off:設(shè)置字符顯示,是否按“\nnn”的格式顯示,如果打開,則字符串或字符數(shù)據(jù)按\nnn顯示,如“65”。
set print union on/off: 設(shè)置顯示結(jié)構(gòu)體時(shí),是否顯式其內(nèi)的聯(lián)合體數(shù)據(jù)。
eg:
typedef enum {Tree, Bug} Species;
typedef enum {Big_tree, Acorn, Seedling} Tree_forms;
typedef enum {Caterpillar, Cocoon, Butterfly}
Bug_forms;
struct thing {
Species it;
union {
Tree_forms tree;
Bug_forms bug;
} form;
};
struct thing foo = {Tree, {Acorn}};
p foo
打開:$1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
關(guān)閉:$1 = {it = Tree, form = {...}}
set print object on/off: 在C++中,如果一個(gè)對(duì)象指針指向其派生類,如果打開這個(gè)選項(xiàng),GDB會(huì)自動(dòng)按照虛方法調(diào)用的規(guī)則顯示輸出,如果關(guān)閉這個(gè)選項(xiàng)的話,GDB就不管虛函數(shù)表了。這個(gè)選項(xiàng)默認(rèn)是off。
set print static-members on/off:這個(gè)選項(xiàng)表示,當(dāng)顯示一個(gè)C++對(duì)象中的內(nèi)容是,是否顯示其中的靜態(tài)數(shù)據(jù)成員。默認(rèn)是on。
set print vtbl on/off: 當(dāng)此選項(xiàng)打開時(shí),GDB將用比較規(guī)整的格式來顯示虛函數(shù)表時(shí)。其默認(rèn)是關(guān)閉的。
2.12 歷史記錄
當(dāng)你用GDB的print查看程序運(yùn)行時(shí)的數(shù)據(jù)時(shí),你每一個(gè)print都會(huì)被GDB記錄下來。GDB會(huì)以2,
1。這個(gè)功能所帶來的好處是,如果你先前輸入了一個(gè)比較長(zhǎng)的表達(dá)式,如果你還想查看這個(gè)表達(dá)式的值,你可以使用歷史記錄來訪問,省去了重復(fù)輸入。
2.13 自定義變量
你可以在GDB的調(diào)試環(huán)境中定義自己的變量,用來保存一些調(diào)試程序中的運(yùn)行數(shù)據(jù)。要定義一個(gè)GDB的變量很簡(jiǎn)單只需。使用GDB的set命令。GDB的環(huán)境變量和UNIX一樣,也是以$起頭。
eg:set $foo = *object_ptr
show convenience: 查看當(dāng)前所設(shè)置的所有的環(huán)境變量
2.14 查看寄存器
info registers: 查看寄存器的情況。(包括浮點(diǎn)寄存器)
info all-registers:查看寄存器的情況。(除了浮點(diǎn)寄存器)
3 離線調(diào)試
當(dāng)你的用戶只能給你提供一個(gè)coredump文件而沒有實(shí)際運(yùn)行環(huán)境的時(shí)候,你也可以自己搭建離線調(diào)試環(huán)境。 需要準(zhǔn)備好,同版本的所有coredump進(jìn)程涉及到的二進(jìn)制文件,包括動(dòng)態(tài)鏈接庫,編譯出帶gdb編譯選項(xiàng)的版本,加載調(diào)試。 同版本指的是完全沒有代碼變更,這樣即使codedump文件使用release版本的軟件生成的,也可以用帶符號(hào)信息的debug版本的軟件來調(diào)試,十分強(qiáng)大! gdb 進(jìn)入gdb后,需要設(shè)置下本地的對(duì)應(yīng)lib的搜索路徑:
set solib-search-path lib1:lib2:libn
05.gcc和g++的區(qū)別
gcc和g++是兩個(gè)不同的編譯器,主要用于編譯C語言和C++語言的代碼。
- gcc:GNU Compiler Collection(GNU編譯器集合),是一個(gè)包括C、C++、Objective-C、Fortran、Ada等多種語言的編譯器。它可以對(duì)C語言進(jìn)行編譯,但對(duì)于C++程序則需要使用g++命令。
- g++:是gcc針對(duì)C++的一個(gè)前端。在處理文件時(shí),g++會(huì)自動(dòng)把源代碼中以.cpp或者.C結(jié)尾的文件當(dāng)做是C++程序來處理,并調(diào)用相應(yīng)的后端進(jìn)行編譯。
因此,主要區(qū)別在于:
- gcc主要用于編譯C程序,而g++主要用于編譯C++程序。
- g++除了支持 C 語言外還支持 C ++ 語言,并且可以正確地鏈接 C ++ 庫。
- 編寫 C 代碼時(shí)不需要使用 g ++ 前綴,在這種情況下直接使用 gcc 即可;而寫 C ++ 程序時(shí)則必須使用 g ++ 前綴來調(diào)用 g ++ 編譯器。
06.Linux下程序有問題,如何調(diào)試?(答GDB打開,打上Breakpoint進(jìn)行調(diào)試)
在Linux下,可以使用GDB(GNU調(diào)試器)來進(jìn)行程序的調(diào)試。下面是基本步驟:
- 編譯程序時(shí)加上 -g 選項(xiàng),以便生成可供GDB使用的調(diào)試信息。
- 打開終端,在命令行中輸入 gdb 命令并加上可執(zhí)行文件名作為參數(shù),例如:gdb my_program。
- 在GDB提示符下輸入 run 命令運(yùn)行程序。
- 如果程序出現(xiàn)錯(cuò)誤,GDB會(huì)在出錯(cuò)的位置停止執(zhí)行,并顯示出錯(cuò)信息。
- 可以在需要調(diào)試的代碼行前打上 breakpoint(斷點(diǎn)),用于暫停程序的執(zhí)行。例如,在GDB提示符下輸入 break line_number (line_number為需要暫停執(zhí)行的代碼行號(hào)),然后再輸入 run 命令重新運(yùn)行程序即可。
- 在程序暫停執(zhí)行時(shí),可以使用 GDB 提供的一系列命令來檢查變量、堆棧等信息,以及單步執(zhí)行代碼、跳轉(zhuǎn)到指定位置等操作。常用命令包括 print、backtrace、step、next、continue 等。
- 調(diào)試完成后,可以通過 quit 命令退出 GDB。