info program 顯示程式狀態資訊:是否在執行,什麼程序,為何中斷。
5.1 斷點,監視點,捕獲點
斷點:以行號,函式名或程式的絕對位址中斷,某些系統可以在可執行程式執行前,在共享庫里設定斷點。
監視點:特殊的斷點,在表示式的值改變的時候中斷程式。
捕獲點:特殊的斷點,用來在某些事件發生時中斷程式。
5.1.1 設定斷點
break location
break ...ifcond
帶引數設定斷點:在每次斷點時計算cond表示式,且當表示式為真(表示式不為0)時中斷
tbreak args
temporary breakpoint
設定乙個只中斷一次的斷點
hbreak args
hardware breakpoint
設定乙個硬體支援的斷點
thbreak args
設定乙個只中斷一次的硬體支援斷點
rbreak regex
匹配正規表示式
info breakpoints
info break
info watchpoints
列印斷點,監視點和捕獲點
5.1.2 設定監視點
表示式改變
watch expr [thread threadnum]
設定乙個表示式監視點,在表示式expr被改寫和值改變時gdb中斷程式。
[thread threadnum]gdb只在threadnum標識的執行緒改變表示式expr時中斷。注意,只在硬體監視點上gdb才起作用。
watch foo
最常用的用法時監視變數
gdb test
b change
rwatch len1cc
qrwatch expr [thread threadnum]
讀表示式的值時中斷
awatch expr [thread threadnum]
讀或寫表示式的值時中斷
info watchpoints
set can-use-hw-watchpoints 設定使用硬體監視點
show can-use-hw-watchpoints 顯示硬體監視點的當前模式
5.1.3 設定捕獲點
事件中斷
catch event 在event發生時中斷
event:
throw c++異常的丟擲
catch c++異常的捕獲
exception [exceptionname]
exception unhandled 沒有被程式處理的異常
assert
exec
fork
vfork
load [libname] 載入共享庫
unload [libname] 解除安裝共享庫
tcatch event
5.1.4 刪除斷點
clear 在選定的棧幀上的下乙個指令上刪除所有的斷點
clear location 在指定的位置刪除所有的斷點
clear function 刪除在名為function入口點上的斷點
clear file:function
clear linenum 刪除在指定行上的斷點
clear file:linenum
delete [breakpoints] [range...] 在指定的範圍內刪除斷點,指定斷點num號
5.1.5 禁用斷點
disable [breakpoints] [range...]
enable [breakpoints] [range...]
5.1.6 中斷條件
condition bnum expression 為斷點bnum指定斷點條件表示式
condition bnum 從斷點bnum裡刪除條件
b change
info breakpoints
condition 1 s1=="hanyu"
rerror in testing breakpoint condition:
couldn't write extended state status: 錯誤的位址. //不清楚為何報錯wwwwwww,查了下說是linux的bug,可以到window的虛擬機器試試
乙個特殊的條件斷點例子是在斷點到達一定次數後才中斷。
可以使用斷點的忽略計數。
ignore bnum count 將斷點bnum的忽略計數設定為count
5.1.7 斷點命令列表
可以為斷點設定一系列命令讓斷點中斷時執行。
為斷點bnum指定命令列表:
commands [bnum]
... commands-list ...
end不帶bnum引數的話,commmands指定最後的斷點
下面的例子可以用斷點命令在foo的入口點,當x>0時列印x的值:
break foo if x>0
commands
printf "x is %d \n", x
continue
end用命令給需要的變數設定正確的值:
break 403
commands
set x = y +4
continue
end5.1.8 斷點選單
對於函式名過載的函式如何打斷點
5.2 繼續和單步跟蹤
continue | c
step [count] | s
step in單步執行
step count
單步執行n次
next [count] | n
當前棧幀單步執行
set step-mode
show step-mode
顯示gdb是否中斷或越過不帶源**行除錯資訊的函式
set step-mode on
如果你對乙個不帶符號資訊的函式指令感興趣,不想gdb越過這個函式
set step-mode off
設定step命令越過不帶除錯資訊的函式
until | u
在當前棧幀上繼續執行直到越過當前行的源**行。和next相比,用來避免多次單步執行乙個迴圈。
until location | u location
繼續執行到程式指定的位置。
使用臨時斷點,比不帶引數的util要快。
只有在指定位置的當前幀上,它才會真正被執行。意味著until可以用來跳過函式巢狀呼叫。
until 99
94 int factorial(int value)
95 99 return value;
100 }
advance location
繼續執行到程式指定的位置。
目標位置不必在當前幀上,不會跳過函式巢狀呼叫。
stepi arg | si arg
執行乙個機器指令,然後中斷返回。如display/i $pc,自動顯示指令???$8.6節自動顯示
nexti arg | ni arg
5.3 訊號
訊號是程式裡發生的非同步事件。
sigint 中斷訊號ctrl+c
sigse** 段錯誤
sigalrm 定時器超時
info signals
info handle
handle signal [keywords...]
keywords:
nostop
stop
noprint
pass | noignore
nopass | ignore
5.4 中斷和開始多執行緒程式
break linespec thread threadno
break linespec thread threadno if ...
linespec:指定源**行
break frik.c:13 thread 28 if ab > lim
gdb中斷後所有執行緒將中斷,可以檢視狀態
6 中斷和異常
問題 早期的計算機各程式只能序列執行,系統資源利用率低。解決 發明了作業系統,引入中斷機制,實現多道程式併發執行。本質 傳送中斷意味著需要作業系統的介入,開展管理工作。將多道程式 3個程式 同時放入到記憶體,各個程式併發執行 程序1在使用者態下執行,一段時間後cpu收到計時部件發出的中斷訊號,切換為...
x86中斷(一) 中斷分類
一 中斷分類 x86系統支援256個中斷源,每個中斷源使用0 255數字標識,該標識稱作中斷向量號 即cpu中斷源的中斷號,要與外部中斷的中斷號irq n相區別 cpu通過獲取中斷向量號識別中斷源。256個中斷源可以分為 其中 1 內部中斷 由cpu內部事件及執行軟中斷指令產生,由除法中斷 溢位中斷...
s5pv210 中斷實戰
以下內容源於部落格的學習,以及朱有鵬老師課程的學習,和網路資源的整理。1 建立異常向量表 2 中斷初始化 3 使能 如外部中斷,寫中斷處理函式 4 建立中斷號與中斷處理函式的聯絡,使能。當中斷發生時,中斷處理函式會自動處理中斷 流程如下圖 下面按上述步驟編寫 內容細節見部落格 s5pv210 裸機 ...