5 中斷和繼續

2021-10-19 18:02:59 字數 4326 閱讀 6517

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

print

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 裸機 ...