專利名稱:快速定位內(nèi)存越界的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及單片機(jī)的嵌入式系統(tǒng),尤其涉及一種嵌入式系統(tǒng)中 定位內(nèi)存越界的方法和裝置。
背景技術(shù):
在基于單片機(jī)的嵌入式系統(tǒng)中,內(nèi)存資源相對較少,在實(shí)際的
才喿作系統(tǒng)編寫中,對于內(nèi)存的管理,一^殳采用如下的處理
將內(nèi)存分級的方式,即才艮據(jù)大小的不同,分成幾個不同等級的 內(nèi)存,應(yīng)用程序在進(jìn)行內(nèi)存塊申請時,申明所需要的內(nèi)存大小,系 統(tǒng)返回相應(yīng)的內(nèi)存塊給應(yīng)用程序。通過這種方式,避免內(nèi)存的浪費(fèi)。 一劣殳內(nèi)存長度分級定義16、 32、 64、 128、和256字節(jié)等。
在內(nèi)存的存儲結(jié)構(gòu)上,采用如下帶有頭結(jié)點(diǎn)的單向鏈表的結(jié)構(gòu):
頭結(jié)點(diǎn)
指向鏈?zhǔn)捉Y(jié)點(diǎn)
指向鏈尾結(jié)點(diǎn)
鏈表結(jié)點(diǎn)
指向下一結(jié)點(diǎn)
存儲的消息
由上可以看出,通過訪問頭結(jié)點(diǎn),從"指向鏈?zhǔn)捉Y(jié)點(diǎn)"可以訪 問到鏈?zhǔn)捉Y(jié)點(diǎn),訪問到鏈?zhǔn)捉Y(jié)點(diǎn)之后,從"指向下一結(jié)點(diǎn),,可以訪 問下一結(jié)點(diǎn),如此反復(fù),可以訪問到鏈表的所有結(jié)點(diǎn)。(鏈表結(jié)點(diǎn)中 "指向下 一 結(jié)點(diǎn)"單元所占用的字節(jié)定義為開銷字節(jié))。
在內(nèi)存中,鏈表結(jié)點(diǎn)是連續(xù)存儲的。由于鏈表結(jié)點(diǎn)中"指向下 一結(jié)點(diǎn)"含有指向下一結(jié)點(diǎn)的信息,如果相鄰的上一個鏈表結(jié)點(diǎn)的 "存儲的消息"單元寫入過長的消息,將下一個鏈表結(jié)點(diǎn)的"指向 下一結(jié)點(diǎn)"單元內(nèi)容改寫,將造成下一個鏈表結(jié)點(diǎn)所在的鏈表異常 斷鏈,這樣就造成了 "內(nèi)存隊(duì)列寫越界造成的問題"(下面簡寫為"內(nèi) 存越界問題")。
內(nèi)存越界問題出現(xiàn)之后,造成的后果如下
1. 被異常斷鏈的鏈表,系統(tǒng)并不是立即就使用到,而只有被 使用到之后,才會有故障發(fā)生,這樣就造成了故障的延遲;
2. 由內(nèi)存越界問題造成的故障現(xiàn)象與^皮打斷的鏈表的功能 有關(guān)。由于《連表結(jié)點(diǎn)是系統(tǒng)公用的,結(jié)點(diǎn)之間只存在空間上的相鄰 關(guān)系,而不存在邏輯功能上的因果關(guān)系,基于這個原因,內(nèi)存越界 問題造成的故障現(xiàn)象就千奇百怪了;以及
3. 由于內(nèi)存越界造成的問題往往造成系統(tǒng)自動重啟,系統(tǒng)重 啟之后重新初始化一系列參數(shù),這樣故障環(huán)境就被破壞了 。
由于內(nèi)存越界問題造成的故障時間上有延遲、故障現(xiàn)象不確定, 也就是說沒有辦法穩(wěn)定的復(fù)現(xiàn)故障,所以這樣的故障處理起來異常 的困難。目前沒有發(fā)現(xiàn)有專門的文獻(xiàn)介紹這種問題的處理辦法。在 以往的經(jīng)—驗(yàn)中,一^:采用以下辦法來解決這個問題在所有的應(yīng)用 程序申請內(nèi)存的地方進(jìn)行檢查,看申請的內(nèi)存長度與實(shí)際寫入的數(shù) 據(jù)長度是否一致,如不一致,則可能是造成內(nèi)存寫越界的原因。
<旦是在實(shí)際^喿作上述方法具有以下缺點(diǎn)
1. 應(yīng)用禾呈序申i青內(nèi)存的地方比4交多,對所有的申^青內(nèi)存i也方
進(jìn)行才企查,更改的地方多,工作量大;
2. 由于更改的;也方多,所以需要的調(diào)試/f、瑪量大,i奮改時對 原代碼影響大,并且容易寫錯而引入其它的問題;
3. 由于內(nèi)存塊是分級的,在應(yīng)用程序申請20字節(jié)的情況下, 系統(tǒng)將返回一個32字節(jié)的內(nèi)存塊,該內(nèi)存塊的可用字節(jié)長度等于
(32-開銷字節(jié))。應(yīng)用程序在寫入小于或等于"可用字節(jié)長度"的 字節(jié)情況下,將不會造成內(nèi)存越界。當(dāng)寫入大于"可用字節(jié)長度" 的字節(jié)情況下,將造成內(nèi)存越界。這樣當(dāng)找到了申請長度與寫入長 度不一致的地方時,還需要判斷實(shí)際寫入的數(shù)據(jù)是否超過了申請內(nèi) 存塊的"可用字節(jié)長度"。也就是說還需要對所寫入的數(shù)據(jù)進(jìn)行跟蹤 分析,才能得出結(jié)論。
總的說來,這個方法理論上可行,但實(shí)現(xiàn)起來困難,工作量大, 不容易成功。
因此,需要一種快速定位內(nèi)存越界的解決方案,能夠解決上述 相關(guān)才支術(shù)中的問題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是克服現(xiàn)有技術(shù)存在的不足,提供 一種鏈?zhǔn)絻?nèi)存才幾制嵌入式系統(tǒng)的快速定位內(nèi)存越界的方法和裝置, 能快速有效地定位故障,避免故障延誤和連帶故障的發(fā)生。
根據(jù)本發(fā)明的一個方面,提供了 一種用于鏈?zhǔn)絻?nèi)存機(jī)制嵌入式 系統(tǒng)的快速定位內(nèi)存越界的方法,包括以下步驟步驟S102,在申 請內(nèi)存塊時刻以及歸還內(nèi)存塊時刻分別進(jìn)行系統(tǒng)內(nèi)存鏈表一致性檢查,在不一致的情況下,判斷發(fā)生了內(nèi)存越界;以及步驟S104,在 第一次發(fā)現(xiàn)內(nèi)存越界時,獲取并記錄內(nèi)存越界信息,并死鎖系統(tǒng)。
步驟S102還包括以下步驟在判斷發(fā)生了內(nèi)存越界后,在未 發(fā)生其他內(nèi)存塊申請及歸還事件的情況下,在歸還內(nèi)存塊時刻上報 內(nèi)存越界;在發(fā)生其他內(nèi)存塊申請事件的情況下,在其他內(nèi)存塊申 請時刻上報內(nèi)存越界;以及在發(fā)生其他內(nèi)存塊歸還事件的情況下, 在其他內(nèi)存塊歸還時刻上報內(nèi)存越界。
根據(jù)本發(fā)明的另 一個方面,提供了 一種用于鏈?zhǔn)絻?nèi)存機(jī)制嵌入 式系統(tǒng)的快速定位內(nèi)存越界的裝置,包括判斷才莫塊,在申請內(nèi)存 塊時刻以及歸還內(nèi)存塊時刻分別進(jìn)行系統(tǒng)內(nèi)存鏈表一致性檢查,在 不一致的情況下,判斷發(fā)生了內(nèi)存越界;以及處理模塊,在第一次 發(fā)現(xiàn)內(nèi)存越界時,獲取并記錄內(nèi)存越界信息,并死鎖系統(tǒng)。
在判斷發(fā)生了內(nèi)存越界后,判斷模塊用于在未發(fā)生其他內(nèi)存塊 申請及歸還事件的情況下,在歸還內(nèi)存塊時刻上才艮內(nèi)存越界;在發(fā) 生其他內(nèi)存塊申請事件的情況下,在其他內(nèi)存塊申請時刻上報內(nèi)存 越界;以及在發(fā)生其他內(nèi)存塊歸還事件的情況下,在其他內(nèi)存塊歸 還時刻上報內(nèi)存越界。
采用本發(fā)明的處理辦法能夠有效地定位故障,找到系統(tǒng)BUG, 解決問題。采用本發(fā)明所述的辦法, 一旦出現(xiàn)故障,該故障就立即 被捕獲。本發(fā)明還可以指出是哪一個內(nèi)存塊寫越界,寫入的數(shù)據(jù)是 什么,通過分析該數(shù)據(jù),找到是哪一個模塊出現(xiàn)問題,進(jìn)行更改就 可以將內(nèi)存越界問題解決。 一方面,在第一次發(fā)生內(nèi)存越界問題的 時候就捕獲它,這樣上面提到的故障延遲就不會出現(xiàn)了,也只有這 個時候才能夠?qū)С霎惓5臄?shù)據(jù),用于故障分析;另一方面,發(fā)現(xiàn)問 題就死鎖系統(tǒng),這樣避免了后續(xù)的連帶發(fā)生的故障現(xiàn)象,也就是說,
上面提到的千奇百怪的故障現(xiàn)象不再出現(xiàn);再一方面,發(fā)現(xiàn)問題就
死鎖系統(tǒng),這樣避免了故障環(huán)境祐:石皮壞,以供開發(fā)人員分析處理。
本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部 分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā) 明的目的和其他優(yōu)點(diǎn)可通過在所寫的說明書、 一又利要求書、以及附 圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申 請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并
不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中
圖1是示出根據(jù)本發(fā)明的快速定位內(nèi)存越界的方法的流程圖2是示出根據(jù)本發(fā)明的快速定位內(nèi)存越界的裝置的框圖3是示出根據(jù)本發(fā)明實(shí)施例的內(nèi)存生命周期的示意圖4是示出根據(jù)本發(fā)明實(shí)施例的快速定位內(nèi)存越界的方法的流 程圖5是示出根據(jù)本發(fā)明實(shí)施例的發(fā)生內(nèi)存越界前后事件發(fā)生情 況的示意圖6是示出根據(jù)本發(fā)明一個實(shí)施例的監(jiān)視一種內(nèi)存塊越界問題 的方法的流禾呈圖;以及
圖7是示出根據(jù)本發(fā)明 一個實(shí)施例的監(jiān)視多種內(nèi)存塊越界問題 的方法的流3f呈圖。
具體實(shí)施例方式
下面將結(jié)合附圖來詳細(xì)i兌明本發(fā)明的實(shí)施例。
圖1是示出根據(jù)本發(fā)明的快速定位內(nèi)存越界的方法的流程圖。
參照圖1,根據(jù)本發(fā)明的快速定位內(nèi)存越界的方法包括以下步驟 步驟S102,在申請內(nèi)存塊時刻以及歸還內(nèi)存塊時刻分別進(jìn)4亍系統(tǒng)內(nèi) 存鏈表一致性4企查,在不一致的情況下,判斷發(fā)生了內(nèi)存越界;以 及步驟S104,在第一次發(fā)現(xiàn)內(nèi)存越界時,獲取并記錄內(nèi)存越界信息, 并死鎖系纟充。
步驟S102還包括以下步驟在判斷發(fā)生了內(nèi)存越界后,在未 發(fā)生其他內(nèi)存塊申請及歸還事件的情況下,在歸還內(nèi)存塊時刻上報 內(nèi)存越界;在發(fā)生其他內(nèi)存塊申請事件的情況下,在其他內(nèi)存塊申 請時刻上報內(nèi)存越界;以及在發(fā)生其他內(nèi)存塊歸還事件的情況下, 在其他內(nèi)存塊歸還時刻上報內(nèi)存越界。
圖2是示出根據(jù)本發(fā)明的快速定位內(nèi)存越界的裝置的框圖。參 照圖2,根據(jù)本發(fā)明的快速定位內(nèi)存越界的裝置200包括判斷模 塊202,在申請內(nèi)存塊時刻以及歸還內(nèi)存塊時刻分別進(jìn)4亍系統(tǒng)內(nèi)存 鏈表一致性檢查,在不一致的情況下,判斷發(fā)生了內(nèi)存越界;以及 處理模塊204,在第一次發(fā)現(xiàn)內(nèi)存越界時,獲取并記錄內(nèi)存越界信 息,并死鎖系統(tǒng)。
在判斷發(fā)生了內(nèi)存越界后,判斷模塊202用于在未發(fā)生其他內(nèi) 存塊申請及歸還事件的情況下,在歸還內(nèi)存塊時刻上才艮內(nèi)存越界; 在發(fā)生其他內(nèi)存塊申請事件的情況下,在其他內(nèi)存塊申請時刻上才艮 內(nèi)存越界;以及在發(fā)生其他內(nèi)存塊歸還事件的情況下,在其他內(nèi)存 塊歸還時刻上報內(nèi)存越界。
下面結(jié)合圖3和圖4來描述本發(fā)明的一個實(shí)施例。圖3是示出 才艮據(jù)本發(fā)明實(shí)施例的內(nèi)存生命周期的示意圖。圖3中,分析了系統(tǒng) 中的內(nèi)存塊申請及釋方文的過程, 一個內(nèi)存塊4吏用過禾呈可以分成5個 階段,階段l:申請內(nèi)存塊;階段2:獲得內(nèi)存塊;階段3:寫入數(shù) 據(jù)到內(nèi)存塊;階段4:處理內(nèi)存塊數(shù)據(jù);階段5:歸還內(nèi)存塊。內(nèi)存 越界是由于向內(nèi)存塊寫入一段字節(jié)造成的,因此它一定發(fā)生在階段 3,即寫入數(shù)據(jù)的階段。如果能夠嚴(yán)格的監(jiān)視階段3,檢查它是否造 成內(nèi)存寫越界問題的話,就可以在第 一 時間捕獲該問題。
內(nèi)存越界問題發(fā)生之后,此后發(fā)生的第一個內(nèi)存塊申請及歸還 方面發(fā)生的事件包括以下兩種情況內(nèi)存越界的內(nèi)存塊被歸還給系 統(tǒng);以及發(fā)生其它的內(nèi)存塊申請事件。
圖4是示出根據(jù)本發(fā)明實(shí)施例的快速定位內(nèi)存越界的方法的流 程圖。參照圖4,本實(shí)施例的快速定位內(nèi)存越界的方法包括如下步 驟
步驟S402,監(jiān)視內(nèi)存越界問題;以及
步驟S404,在第一次發(fā)現(xiàn)內(nèi)存越界問題的時候,捕獲該內(nèi)存越 界問題,記錄必要的信息,并死鎖系統(tǒng),等待開發(fā)人員處理。
其中,步驟S402包括以下步驟步驟S402-2,定義第一才企查過程在申請內(nèi)存塊時刻進(jìn)行系統(tǒng) 內(nèi)存鏈表一致性才全查,如一致說明沒有問題,如不一致,說明發(fā)生 內(nèi)存隊(duì)列異常;以及定義第二才企查過程在歸還內(nèi)存塊時刻進(jìn)行系 統(tǒng)內(nèi)存鏈表一致性檢查,如一致說明沒有問題,如不一致,說明發(fā) 生內(nèi)存隊(duì)列異常;以及
步驟S402-4,監(jiān)視向內(nèi)存塊寫入數(shù)據(jù)階段的內(nèi)存越界問題,如 圖5所示,該步驟包括三種情況
1. 在發(fā)生了內(nèi)存越界問題之后,若未發(fā)生其它的內(nèi)存塊申請 及歸還事件,則根據(jù)第二4企查過程,在t5時刻,即歸還內(nèi)存塊時刻 匯報所述問題;
2. 在發(fā)生了內(nèi)存越界問題之后,若發(fā)生其它的內(nèi)存塊申請事
件,則根據(jù)第一檢查過程,在tr時刻,即其它內(nèi)存塊申請時刻匯
報所述問題;以及
3. 在發(fā)生了內(nèi)存越界問題之后,若發(fā)生其它的內(nèi)存塊歸還事 件,則根據(jù)第一檢查過程,在t5'時刻,即其它內(nèi)存塊歸還時刻匯 報所述問題。
在實(shí)際應(yīng)用過程中,還可以對一種或多種內(nèi)存塊越界問題進(jìn)行監(jiān)視。
圖6是示出根據(jù)本發(fā)明 一個實(shí)施例的監(jiān)視一種內(nèi)存塊越界問題 的方法的流程圖。參照圖6,監(jiān)^L一種內(nèi)存塊越界問題包括以下步 驟
步驟S602,啟動內(nèi)存越界4企查;
步驟S604,對梯:作系統(tǒng)原有的內(nèi)存塊申請程序進(jìn)4亍更改,在申 請時,檢查該種類內(nèi)存鏈表一致情況,如異常,則死鎖系統(tǒng),等待 開發(fā)人員干預(yù);以及
步驟S606,對才喿作系統(tǒng)原有的內(nèi)存歸還程序進(jìn)4亍更改,在歸還 時,4企查該種類內(nèi)存《連表一致情況,如異常,則死鎖系統(tǒng),等4寺開 發(fā)人員干預(yù)。 圖7是根據(jù)本發(fā)明一個實(shí)施例的監(jiān)視多種內(nèi)存塊內(nèi)存越界問題 的方法的流程圖。參照圖7,監(jiān)視多種內(nèi)存塊內(nèi)存越界問題的方法 包4舌以下步驟
步莩《S702,啟動內(nèi)存越界4企查;
步驟S704,對才乘作系統(tǒng)原有的內(nèi)存塊申i青程序進(jìn)4亍更改,在申 請時,檢查需要監(jiān)視的各種類內(nèi)存鏈表一致情況,如異常,則死鎖 系統(tǒng),等待開發(fā)人員干預(yù);以及
步驟S706,對才喿作系統(tǒng)原有的內(nèi)存塊歸還程序進(jìn)4亍更改,在歸 還時,檢查需要監(jiān)視的各種類內(nèi)存鏈表一致情況,如異常,則死鎖 系統(tǒng),等待開發(fā)人員干預(yù)。
通過實(shí)施本發(fā)明,能夠有效地定位故障,找到系統(tǒng)BUG,解決 問題。采用本發(fā)明所述的辦法, 一旦出現(xiàn)故障,該故障就立即被捕 獲。本發(fā)明還可以指出是哪一個內(nèi)存塊寫越界,寫入的數(shù)據(jù)是什么, 通過分析該數(shù)據(jù),找到是哪一個模塊出現(xiàn)問題,進(jìn)行更改就可以將 內(nèi)存越界問題解決。
以上所述〗又為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明, 對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在 本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等, 均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種快速定位內(nèi)存越界的方法,用于鏈?zhǔn)絻?nèi)存機(jī)制嵌入式系統(tǒng),其特征在于,包括以下步驟步驟S102,在申請內(nèi)存塊時刻以及歸還內(nèi)存塊時刻分別進(jìn)行系統(tǒng)內(nèi)存鏈表一致性檢查,在不一致的情況下,判斷發(fā)生了內(nèi)存越界;以及步驟S104,在第一次發(fā)現(xiàn)內(nèi)存越界時,獲取并記錄所述內(nèi)存越界信息,并死鎖系統(tǒng)。
2. 根據(jù)權(quán)利要求1所述的快速定位內(nèi)存越界的方法,其特征在 于,所述步艱《S102還包4舌以下步驟在判斷發(fā)生了所述內(nèi)存越界后,在未發(fā)生其他內(nèi)存塊申請 及歸還事件的情況下,在歸還內(nèi)存塊時刻上報所述內(nèi)存越界。
3. 根據(jù)權(quán)利要求1所述的快速定位內(nèi)存越界的方法,其特征在 于,所述步驟S102還包4舌以下步驟在判斷發(fā)生了所述內(nèi)存越界后,在發(fā)生其他內(nèi)存塊申請事 件的情況下,在所述其他內(nèi)存塊申請時刻上報所述內(nèi)存越界。
4. 根據(jù)權(quán)利要求1所述的快速定位內(nèi)存越界的方法,其特征在 于,所述步驟S102還包4舌以下步-驟在判斷發(fā)生了所述內(nèi)存越界后,在發(fā)生其他內(nèi)存塊歸還事 件的情況下,在所述其他內(nèi)存塊歸還時刻上報所述內(nèi)存越界。 5. —種快速定位內(nèi)存越界的裝置,用于鏈?zhǔn)絻?nèi)存機(jī)制嵌入式系 統(tǒng),其特4正在于,包括判斷模塊,在申請內(nèi)存塊時刻以及歸還內(nèi)存塊時刻分別進(jìn) 行系統(tǒng)內(nèi)存鏈表一致性檢查,在不一致的情況下,判斷發(fā)生了 內(nèi)存越界;以及處理才莫塊,在第一次發(fā)現(xiàn)內(nèi)存越界時,獲取并記錄所述內(nèi) 存越界信息,并死鎖系統(tǒng)。6. 根據(jù)權(quán)利要求5所述的快速定位內(nèi)存越界的裝置,其特征在 于,在判斷發(fā)生了所述內(nèi)存越界后,所述判斷模塊用于在未發(fā) 生其他內(nèi)存塊申請及歸還事件的情況下,在歸還內(nèi)存塊時刻上 報所述內(nèi)存越界。7. 才艮據(jù)權(quán)利要求5所述的快速定位內(nèi)存越界的裝置,其特征在 于,在判斷發(fā)生了所述內(nèi)存越界后,所述判斷模塊用于在發(fā)生 其他內(nèi)存塊申請事件的情況下,在所述其他內(nèi)存塊申請時刻上 才艮所述內(nèi)存越界。8. 根據(jù)權(quán)利要求5所述的快速定位內(nèi)存越界的裝置,其特征在 于,在判斷發(fā)生了所述內(nèi)存越界后,所述判斷模塊用于在發(fā)生 其他內(nèi)存塊歸還事件的情況下,在所述其^也內(nèi)存塊歸還時刻上 才艮所述內(nèi)存越界。
全文摘要
本發(fā)明披露了一種用于鏈?zhǔn)絻?nèi)存機(jī)制嵌入式系統(tǒng)的快速定位內(nèi)存越界的方法和裝置,該方法包括以下步驟步驟S102,在申請內(nèi)存塊時刻以及歸還內(nèi)存塊時刻分別進(jìn)行系統(tǒng)內(nèi)存鏈表一致性檢查,在不一致的情況下,判斷發(fā)生了內(nèi)存越界;以及步驟S104,在第一次發(fā)現(xiàn)內(nèi)存越界時,獲取并記錄內(nèi)存越界信息,并死鎖系統(tǒng)。本發(fā)明能夠快速有效地定位故障,找到系統(tǒng)BUG,解決問題,避免故障延誤和連帶故障的發(fā)生。
文檔編號G06F11/36GK101097542SQ200710129458
公開日2008年1月2日 申請日期2007年7月17日 優(yōu)先權(quán)日2007年7月17日
發(fā)明者關(guān)孔輝, 雷玉新 申請人:中興通訊股份有限公司