TW201241622A - System and method for debugging programs - Google Patents
System and method for debugging programs Download PDFInfo
- Publication number
- TW201241622A TW201241622A TW100113075A TW100113075A TW201241622A TW 201241622 A TW201241622 A TW 201241622A TW 100113075 A TW100113075 A TW 100113075A TW 100113075 A TW100113075 A TW 100113075A TW 201241622 A TW201241622 A TW 201241622A
- Authority
- TW
- Taiwan
- Prior art keywords
- memory
- test
- allocation function
- preset
- program
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Description
201241622 六、發明說明: 【發明所屬之技術領域】 [0001] 本發明涉及一種測試系統及方法,尤其涉及一種程式除 錯系統及方法。 · 【先前技術】 [0002] 針對程式碼的記憶體漏失問題,在應用程式領域有很多 工具可以直接檢測代碼是否有記憶體漏失,如Debugging (調試 ) 工具或者 Tracing (追縱 ) 工具, 有的工 具甚至可以直接定位到錯誤所在的位置。 [0003] 然而針對内核中的例行程式(Rout i ne )或者驅動程式所 出現的記憶體漏失問題,目前尚沒有好的方法,因為這 些代瑪運行在内核空間,沒有Debugging工具或者 Tracing工具可以使用。 【發明内容】 [0004] 鑒於以上内容,有必要提供一種程式除錯系統及方法, 其可偵測内核或者驅動程式中是否出現記憶體漏失的問 題,並定位出記憶體漏失的位置。 [0005] —種程式除錯系統,該系統包括: [0006] 讀取模組:用於從測試電腦的記憶體中讀取指定程式的 源代碼,並將該指定程式源代碼中的預設記憶體分配函 數替換成用戶自定義記憶體分配函數; [0007] 附加模組:用於當該指定程式的一個預設記憶體分配函 數分配記憶體時,調用該用戶自定義記憶體分配函數, 在該預設記憶體分配函數的預設分配記憶體的基礎上附 100113075 表單編號A0101 第4頁/共28頁 1002021802-0 201241622 [0008] [0009] [0010] ❹ [0011] [0012] [0013] ❹ [0014] [0015] 加一個標識區域,並在該附加的標識區域寫入一個識別 字; 測試模組:用於重新編譯該指定程式的源代碼,並開始 記憶體漏失測試; 除錯模組:用於當該記憶體漏失測試沒有通過時,從該 測試電腦的記憶體中搜索識別字,如果搜索到識別字, 則記錄每個識別字在該指定程式源代碼中的位置; 所述除錯模組:還用於當該記憶體漏失測試通過或者沒 有搜索到識別字時,抹除所有附加的標識區域,並重新 編譯該指定程式。 一種程式除錯系統,該系統包括: 讀取模組:用於從測試電腦的記憶體中讀取指定程式的 源代碼,並將該指定程式源代碼中的預設記憶體分配函 數替換成用戶自定義記憶體分配函數; 附加模組:用於當該指定程式的一個預設記憶體分配函 數分配記憶體時,調用該用戶自定義記憶體分配函數, 在該預設記憶體分配函數的預設分配記憶體的基礎上附 加一個標識區域,並在該附加的標識區域寫入一個識別 字; 測試模組:用於重新編譯該指定程式的源代碼,並開始 記憶體漏失測試; 優化模組:用於當該記憶體漏失測試沒有通過時,將測 試電腦記憶體中的所有内容備份至一個檔案; 100113075 表單編號A0101 第5頁/共28頁 1002021802-0 201241622 [0016] 除錯模組:用於從該備份檔案中搜索識別字,如果搜索 到識別字,則記錄每個識別字在該指定程式源代碼中的 位置; [0017] 所述除錯模組:還用於當該記憶體漏失測試通過或者沒 有搜索到識別字時,抹除所有附加的標識區域,並重新 編譯該指定程式。 [0018] 一種程式除錯系統,該系統包括: [0019] 注入模組:用於將用戶自定義記憶體分配函數注入一個 調用堆疊,以替換預設的記憶體分配函數; [0020] 修改模組,用於當一個指定程式的預設記憶體分配函數 分配記憶體時,將該預設記憶體分配函數的呼叫位址修 改為該用戶自定義記憶體分配函數的位址; [0021] 附加模組:用於通過調用該用戶自定義記憶體分配函數 ,在該預設記憶體分配函數的預設分配記憶體的基礎上 附加一個標識區域,並在該附加的標識區域寫入一個識 別字; [0022] 測試模組:用於開始記憶體漏失測試; [0023] 除錯模組:用於當該記憶體漏失測試沒有通過時,從該 測試電腦的記憶體中搜索識別字,如果搜索到識別字, 則記錄測試失敗内容。 [0024] 一種程式除錯系統,該系統包括: [0025] 注入模組:用於將用戶自定義記憶體分配函數注入一個 調用堆疊,以替換預設的記憶體分配函數; 100113075 表單編號A0101 第6頁/共28頁 1002021802-0 201241622 [0026] 修改模組,用於當一個指定程式的預設記憶體分配函數 分配記憶體時,將該預設記憶體分配函數的呼叫位址修 改為該用戶自定義記憶體分配函數的位址; [0027] 附加模組:用於通過調用該用戶自定義記憶體分配函數 ,在該預設記憶體分配函數的預設分配記憶體的基礎上 附加一個標識區域,並在該附加的標識區域寫入一個識 別字; [0028] 測試模組:用於開始記憶體漏失測試; 〇 [0029] 優化模組:用於當該記憶體漏失測試沒有通過時,將測 試電腦記憶體中的所有内容備份至一個檔案; [0030] 除錯模組:用於從該備份檔案中搜索識別字,如果搜索 到識別字,則記錄測試失敗内容。 [0031] 一種程式除錯方法,該方法包括如下步驟: [0032] 讀取步驟:從測試電腦的記憶體中讀取指定程式的源代 碼,並將該指定程式源代碼中的預設記憶體分配函數替 換成用戶自定義記憶體分配函數; [0033] 附加步驟:當該指定程式的一個預設記憶體分配函數分 配記憶體時,調用該用戶自定義記憶體分配函數,在該 預設記憶體分配函數的預設分配記憶體的基礎上附加一 個標識區域,並在該附加的標識區域寫入一個識別字; [0034] 測試步驟:重新編譯該指定程式的源代碼,並開始記憶 體漏失測試; [0035] 除錯步驟一:當該記憶體漏失測試沒有通過時,從該測 100113075 表單編號A0101 第7頁/共28頁 1002021802-0 201241622 試電腦的記憶體中搜索識別字,如果搜索到識別字,則 記錄每個識別字在該指定程式源代碼中的位置; [0036] 除錯步驟二:當該記憶體漏失測試通過或者沒有搜索到 識別字時,抹除所有附加的標識區域,並重新編譯該指 定程式。 [0037] 一種程式除錯方法,該方法包括如下步驟: [0038] 讀取步驟:從測試電腦的記憶體中讀取指定程式的源代 碼,並將該指定程式源代碼t的預設記憶體分配函數替 換成用戶自定義記憶體分配函數; [0039] 附加步驟:當該指定程式的一個預設記憶體分配函數分 配記憶體時,調用該用戶自定義記憶體分配函數,在該 預設記憶體分配函數的預設分配記憶體的基礎上附加一 個標識區域,並在該附加的標識區域寫入一個識別字; [0040] 測試步驟:重新編譯該指定程式的源代碼,並開始記憶 體漏失測試, [0041] 優化步驟:當該記憶體漏失測試沒有通過時,將測試電 腦記憶體中的所有内容備份至一個檔案; [0042] 除錯步驟一:從該備份檔案中搜索識別字,如果搜索到 識別字,則記錄每個識別字在該指定程式源代碼中的位 置; [0043] 除錯步驟二:當該記憶體漏失測試通過或者沒有搜索到 識別字時,抹除所有附加的標識區域,並重新編譯該指 定程式。 100113075 表單編號A0101 第S頁/共28頁 1002021802-0 201241622 [0044] 一種程式除錯方法,該方法包括如下步驟: [0045] 注入步驟:將用戶自定義記憶體分配函數注入一個調用 堆疊,以替換預設的記憶體分配函數; [0046] 修改步驟,當一個指定程式的預設記憶體分配函數分配 記憶體時,將該預設記憶體分配函數的呼叫位址修改為 該用戶自定義記憶體分配函數的位址; [0047] 附加步驟:通過調用該用戶自定義記憶體分配函數,在 該預設記憶體分配函數的預設分配記憶體的基礎上附加 〇 —個標識區域,並在該附加的標識區域寫入一個識別字 9 [0048] 測試步驟:開始記憶體漏失測試;除錯步驟:當該記憶 體漏失測試沒有通過時,從該測試電腦的記憶體中搜索 識別字,如果搜索到識別字,則記錄測試失敗内容。 [0049] 一種程式除錯方法,該方法包括如下步驟: [0050] 注入步驟:將用戶自定義記憶體分配函數注入一個調用 〇 堆疊,以替換預設的記憶體分配函數; [0051] 修改步驟,當一個指定程式的預設記憶體分配函數分配 記憶體時,將該預設記憶體分配函數的呼叫位址修改為 該用戶自定義記憶體分配函數的位址; [0052] 附加步驟:通過調用該用戶自定義記憶體分配函數,在 該預設記憶體分配函數的預設分配記憶體的基礎上附加 一個標識區域,並在該附加的標識區域寫入一個識別字 100113075 表單編號A0101 第9頁/共28頁 1002021802-0 201241622 [0053] 測試步驟:開始記憶體漏失測試;優化步驟:當該記憶 體漏失測試沒有通過時,將測試電腦記憶體中的所有内 容備份至一個檔案; [0054] 除錯步驟:從該備份檔案中搜索識別字,如果搜索到識 別字,則記錄測試失敗内容。 [0055] 前述方法可以由電子設備(如電腦)執行,其中該電子 設備具有附帶了圖形用戶介面(GUI)的顯示螢幕、一個 或多個處理器、儲存器以及儲存在儲存器中用於執行這 些方法的一個或多個模組、程式或指令集。在某些實施 方式中,該電子設備提供了包括無線通信在内的多種功 能。 [0056] 用於執行前述方法的指令可以包含在被配置成由一個或 多個處理器執行的電腦程式產品中。 [0057] 相較於習知技術,所述的程式除錯系統及方法,其可偵 測内核或者驅動程式中是否出現記憶體漏失的問題,並 定位出記憶體漏失的位置,從而縮短了測試時間,提高 了測試效率。 【實施方式】 [0058] 參閱圖1所示,係本發明程式除錯系統較佳實施方式的架 構圖。在本實施方式中,所述程式除錯系統24運行於測 試電腦2中,所述測試電腦2包括透過資料匯流排相連的 顯示設備20、輸入設備22、儲存器23、程式除錯系統24 和處理器(Central Processing Unit,CPU) 25。 [0059] 所述程式除錯系統24用於偵測内核或者驅動程式中是否 100113075 表單編號A0101 第10頁/共28頁 1002021802-0 201241622 出現記憶體漏失的問題,並定位出記憶體漏失的位薏 具體過程以下描述。 [0060] 所述儲存器23用於儲存所述程式除錯系統24的程式 資料。所述顯示設備2〇和輸入設備22用做測試電鵰~ 入輸出設備。 的輪 [0061] Ο 在本實施方式中’所述程式除錯系統24可以被分割、 偏I或多個模組,所述一個或多個模組被儲存在所述儲疒 器23中並被配置成由一個或多個處理器(本實施方弋為 -個處理器25)執行,以完成本發明。例如’參閱圖2所 不,所述程式除錯系統24被分割成讀取模組2〇1、注八模 組202、修改模組203、附加模組204、測試模組205、優 化模組206和除錯模組2〇7。本發明所稱的模組是完成一 特定功能的程式段,比程式更適合於描述軟體在測試電 腦2中的執行過程,關於各模组的功能將在圖3和圖4的流 程圖中具體描述。 [0062] Ο [0063] 參閱圖3所*,係本發明程式除財法的第-實施方式的 流程圖。該第—實施方式是在有根雜式代瑪(Source Code)的情況下進行程式除錯的方法。 步驟S10 ’讀取模組201從儲存器23中讀取指定程式的源 代碼,並將該指定程式源代碼中的預設記憶體分配函數 替換成用戶自定義記憶體分配函數。在本實施方式中, 所述指定程式可以是内核中的例行程式(Routine)或者 驅動程式。 [0064] 舉例而言,如果測試電腦2安裝的*wind〇ws作業系統, 100113075 表單編號A0101 第11頁/共28頁 1002021802-0 201241622 則可以使用如下語句(1)進行替換: [0065] [0066] [0067] [0068] [0069] [0070] [0071] [0072] #define malloc(x) mallocl(x) (j); 其中,mall〇c(x)代表指定程式源代碼中的一個預設記 憶體分配函數,mall〇cl(x)代表該預設記憶體分配函數 對應的用戶自定義記憶體分配函數。 如果測試電腦2安裝的是Linux作業系統,則可以使用如 下語句(2 )進行替換: #define kmalloc(size, GFP_ATOMIC) kmal-l〇c_l((size), GFP_ATOMIC) (2); 其中,kmal loc ()代表指定程式源代碼中的一個預設記 憶體分配函數,kmal loc_l ()代表該預設記憶體分配函 數對應的用戶自定義記憶體分配函數。 步驟S11,當該指定程式的一個預設記憶體分配函數分配 記憶體時,附加模組204調用該用戶自定義記憶體分配函 數,在該預設記憶體分配函數的預設分配記憶體的基礎 上附加一個標識區域,以加大預設分配記憶體的大小。 在本實施方式中,所述標識區域可以附加在該預設分配 記憶體的尾部,也可以附加在該預設分配記憶體的頭部 〇 舉例而言,如果測試電腦2安裝的是Windows作業系統, 則可以使用如下語句(3 )附加標識區域: #define mallocl(x) mem- set(mall〇c((x+y)),’GUID’,x+y) (3); 100113075 表單編號A0101 第12頁/共28頁 1002021802-0 201241622 [0073] 其中,χ代表該預設記憶體分配函數的預設分配記憶體, y代表在X基礎上附加的一個標識區域。 [0074] 如果測試電腦2安裝的是Linux作業系統,則可以使用如 下語句(4)附加標識區域: [0075] ^define kmalloc_l (size, GFP_ATOMIC) memset (kmalloc ((size + y), GFP_ATOMIC), *GUID', (size +y)) (4); [0076] 其中,size代表該預設記憶體分配函數的預設分配記憶 體,y代表在size基礎上附加的一個標識區域。 [0077] 步驟S12 ’附加模組204在該附加的標識區域寫入一個識 別字。然後’測試模組205重新編譯該指定程式的源代碼 ’並開始記憶體漏失測試。在本實施方式中,所述識別 字為全球唯一識別字(Globally Unique Identifier ,GUID),參見語句(3)和(4)中的,UDID,。所述記 憶體漏失測试可以採用壓力測試(Stress Test)。 〇 [0078]步驟S13,測試模組205判斷該記憶體漏失測試是否通過 。如果該記憶體漏失測試通過,則表明該指定程式中沒 有記憶體漏失,執行步驟S18。如果該記憶體漏失測試沒 有通過,則表明該指定程式中存在記憶體漏失,執行步 驟 S14。 [0079] 步驟S14,優化模組206將處理器25切換至平坦模式( Flat Mode),或者將測試電腦2記憶體中的所有内容備 份至一個檔案。在本實施方式中,將記憶體中所有内容 備份至一個檔案可以採用DUMP方法,如dump 100113075 表單編號A0101 第13頁/共28頁 1002021802-0 201241622 [-cnu][-0123456789][-b〈區塊大小〉][-B〈區塊數 目〉][_d〈密度〉][-f〈設備名稱〉][_h〈層級>][_s < 磁帶長度〉][-T〈日期〉][目錄或檔系統]或dump [-wW ]。 [0080] [0081] [0082] [0083] 100113075 步驟S15,除錯模組207從該測試電腦2的記憶體或該備份 檔案中搜索識別字。可以理解,執行步驟S14是為了使步 驟S1 5中搜索識別字的速度更快。在其他實施方式中,也 可以不執行步驟S14,此時,除錯模組2〇7從該測試電腦2 的記憶體中搜索識別字。 步驟S1 6,除錯模組2 〇 7判斷是否搜索到識別字。如果搜 索到識別字,則執行步驟S17 ;如果沒有搜索到識別字, 則執行步驟S18。 步驟S17,除錯模組2〇7記錄每個識別字在該指定程式源 代碼中的位置。測試人員根據每個識別字在該指定程式 源代碼中的位置,可以修改每個識別字所在位置的代碼 ,然後啟動步驟S10,重新測試,直到測試通過為止。其 中,所述修改每個識別字所在位置的代碼包括:增加釋 放記憶體的語句,修改釋放記憶體語句的條件和位置等 〇 步驟S18,除錯模組2〇7抹除所有附加的標識區域,並重 新編譯該指定程式進行發佈。 參閱圖4所示’係本發明程式除錯方法的第二實施方式的 机程圖β亥第一實施方式是在沒有根源程式代碼 Source Code)的情況下進行程式除錯的方法。 第14頁/共28頁 表單編號A0101 1002021802-0 [0084] 201241622 [0085] 步驟S20,注入模組202將用戶自定義記憶體分配函數( 簡稱“用戶程式”)注入一個調用堆疊(Call Stack) ,以替換預設的記憶體分配函數。 [0086] 舉例而言,如果測試電腦2安裝的是Windows作業系統, 則可以使用DLL (Dynamic Link Library,動態連結程 式庫)注入方法將用戶自定義記憶體分配函數注入内核 的DLL Runtime Library (DLL運行時間程式庫),以 替換預設的記憶體分配函數。 ❹ [0087] 如果測試電腦2安裝的是Linux作業系統,則可以通過修 改系統預設記憶體分配函數在系統内核陣列中的入口位 置,將用戶自定義記憶體分配函數替換掉該預設記憶體 分配函數。 [0088] 〇 步驟S21,當一個指定程式的預設記憶體分配函數分配記 憶體時,修改模組203將該預設記憶體分配函數的呼叫位 址修改為該用戶自定義記憶體分配函數的位址。在本實 施方式中,所述指定程式可以是内核中的例行程式( Routine)或者驅動程式。 [0089] 步驟S22,附加模組204調用該用戶自定義記憶體分配函 數,在該預設記憶體分配函數的預設分配記憶體的基礎 上附加一個標識區域,以加大預設分配記憶體的大小。 在本實施方式中,所述標識區域可以附加在該預設分配 記憶體的尾部,也可以附加在該預設分配記憶體的頭部 〇 [0090] 步驟S23,附加模組204在該附加的標識區域寫入一個識 100113075 表單編號A0101 第15頁/共28頁 1002021802-0 201241622 [0091] 別字。然後’測試模組205開始記憶體漏失測試。在本實 施方式中’所述識別字為全球唯一識別字(Globally Unique Identifier,GUID),所述記憶體漏失測試可 以採用壓力測試(Stress Test)。 步驟S24,測試模組205判斷該記憶體漏失測試是否通過 。如果該記憶體漏失測試通過,則表明該指定程式中沒 有記憶體漏失,流程結束》如果該記憶體漏失測試沒有 通過,則表明該指定程式中存在記憶體漏失,執行步驟 S25。 [0092] [0093] [0094] [0095] 步驟S25,優化模組2〇6將處理器25切換至平坦模式( Flat Mode),或者將測試電腦2記憶體中的所有内容備 份至一個檔案。 步驟S26,除錯模組207從該測試電腦2的記憶體或該備份 檔案中搜索識別字。可以理解,執行步驟S25是為了使步 驟S26中搜索識別字的速度更快。在其他實施方式中,也 可以不執行步驟S25,此時,除錯模組2〇7從該測試電腦2 的記憶體中搜索識別字。 步驟S27,除錯模組207判斷是否搜索到識別字。如果搜 索到識別字’職行步·28 ;如果沒有搜㈣識別字, 則流程結束。 步驟S28 ’除錯模組207記錄測試失敗内容。例如,所述 測試失敗内容可以提醒測試人員該指定程式的源代碼中 存在記憶體漏失。測試人員可以修改源代碼然後啟動 步驟S20,重新測試,直到測試通過為止。其中,所述源 100113075 表單編號A0101 第16頁/共28頁 1002021802-0 201241622 代碼修改包括:增加釋放記憶體的語句,修改釋放記憶 體語句的條件和位置等。 [0096] 最後應說明的是,以上實施方式僅用以說明本發明的技 術方案而非限制,儘管參照較佳實施方式對本發明進行 了詳細說明,本領域的普通技術人員應當理解,可以對 本發明的技術方案進行修改或等同替換,而不脫離本發 明技術方案的精神和範圍。 【圖式簡單說明】 [0097] 圖1係本發明程式除錯系統較佳實施方式的架構圖。 ❹ [0098] 圖2係程式除錯系統的功能模組圖。 [0099] 圖3係本發明程式除錯方法的第一實施方式的流程圖。 [0100] 圖4係本發明程式除錯方法的第二實施方式的流程圖。 【主要元件符號說明】 [0101] 測試電腦:2 [0102] 顯示設備:20 〇 [0103] 輸入設備:22 [0104] 儲存器:23 [0105] 程式除錯系統:24 [0106] 處理器:25 [0107] 讀取模組:201 [0108] 注入模組:202 100113075 表單編號A0101 第17頁/共28頁 1002021802-0 201241622 [0109] 修改模組:203 [0110] 附加模組:204 [0111] 測試模組:20 5 [0112] 優化模組:20 6 [0113] 除錯模組:207 1002021802-0 100113075 表單編號A0101 第18頁/共28頁
Claims (1)
- 201241622 七、申請專利範圍: 1 . 一種程式除錯方法,該方法包括如下步驟: 讀取步驟:從測試電腦的記憶體中讀取指定程式的源代碼 ,並將該指定程式源代碼中的預設記憶體分配函數替換成 用戶自定義記憶體分配函數; 附加步驟:當該指定程式的一個預設記憶體分配函數分配 記憶體時,調用該用戶自定義記憶體分配函數,在該預設 記憶體分配函數的預設分配記憶體的基礎上附加一個標識 區域,並在該附加的標識區域寫入一個識別字; 〇 測試步驟:重新編譯該指定程式的源代碼,並開始記憶體 漏失測試; 除錯步驟一:當該記憶體漏失測試沒有通過時,從該測試 電腦的記憶體中搜索識別字,如果搜索到識別字,則記錄 每個識別字在該指定程式源代碼中的位置;及 除錯步驟二:當該記憶體漏失測試通過或者沒有搜索到識 別字時,抹除所有附加的標識區域,並重新編譯該指定程 式。 ^ 2 .如申請專利範圍第1項所述之程式除錯方法,其中,所述 標識區域附加在該預設分配記憶體的頭部或尾部。 3 .如申請專利範圍第1項所述之程式除錯方法,其中,在測 試步驟與除錯步驟一之間還包括優化步驟:將測試電腦的 處理器切換至平坦模式。 4 . 一種程式除錯方法,該方法包括如下步驟: 讀取步驟:從測試電腦的記憶體中讀取指定程式的源代碼 ,並將該指定程式源代碼中的預設記憶體分配函數替換成 100113075 表單編號A0101 第19頁/共28頁 1002021802-0 201241622 用戶自定義記憶體分配函數; 附加步驟.當該指定程式的一個預設記憶體分配函數分配 記憶體時,調用該用戶自定義記憶體分配函數,在該預設 記憶體分配函數的預設分配記憶體的基礎上附加一個標識 區域,並在該附加的標識區域寫入一個識別字; 測試步驟:重新編譯該指定程式的源代碼,並開始記憶體 漏失測試; 優化步驟:當該記憶體漏失測試沒有通過時,將測試電腦 記憶體中的所有内容備份至一個棺案; 除錯步驟一:從該備份檔案中搜索識別字,如果搜索到識 別字,則記錄每個識別字在該指定程式源代碼中的位置; 及 , 除錯步驟二:當該記憶體漏失測試通過或者沒有搜索到識 別字時,抹除所有附加的標識區域,並重新編譯該指定程 式。 .一種程式除錯方法,該方法包括如下步驟: 注入步驟··將用戶自定義記憶體分配函數注入一個調用堆 叠,以替換預設的記憶體分配函數; 修改步驟’當-個指定程式的預設記憶體分配函數分配記 憶體時’將該預設記憶體分配函數的呼叫位址修改 戶自定義記憶體分配函數的位址; 一 °X 附加步驟:通過調用該用戶自定義記憶體分配函數,在$ 預設記賴分配函數的紐分配錢體的基虹附加—個/ 標識區域,並在該附加的標識區域寫入—個識別字; 測試步驟:開始記憶體漏失測試;及 100113075 除錯步驟:當該記憶體漏失測試沒有通過時從該測 表單編號A0101 第20頁/共28頁 Ϊ002021802-0 201241622 腦的記憶體中搜索識別字,如果搜索到識別字,則記錄測 試失敗内容。 6 .如申請專利範圍第5項所述之程式除錯方法,其中,所述 標識區域附加在該預設分配記憶體的頭部或尾部。 7 .如申請專利範圍第5項所述之程式除錯方法,其中,在測 試步驟與除錯步驟之間還包括優化步驟:將測試電腦的處 理器切換至平坦模式。 8 . —種程式除錯方法,該方法包括如下步驟: 注入步驟:將用戶自定義記憶體分配函數注入一個調用堆 〇 疊,以替換預設的記憶體分配函數; 修改步驟,當一個指定程式的預設記憶體分配函數分配記 憶體時,將該預設記憶體分配函數的呼叫位址修改為該用 戶自定義記憶體分配函數的位址; 附加步驟:通過調用該用戶自定義記憶體分配函數,在該 預設記憶體分配函數的預設分配記憶體的基礎上附加一個 標識區域,並在該附加的標識區域寫入一個識別字; 測試步驟:開始記憶體漏失測試; Ο 優化步驟:當該記憶體漏失測試沒有通過時,將測試電腦 記憶體中的所有内容備份至一個檔案;及 除錯步驟:從該備份檔案中搜索識別字,如果搜索到識別 字,則記錄測試失敗内容。 9 . 一種程式除錯系統,其中,該系統包括: 讀取模組:用於從測試電腦的記憶體中讀取指定程式的源 代碼,並將該指定程式源代碼中的預設記憶體分配函數替 換成用戶自定義記憶體分配函數; 附加模組:用於當該指定程式的一個預設記憶體分配函數 100113075 表單編號A0101 第21頁/共28頁 1002021802-0 201241622 分配記憶體時’調用該用戶自定義記憶體分配函數,在該 預設記憶體分配函數的預設分配記憶體的基礎上附加一個 標識區域,並在該附加的標魅域寫人—個識別字; 測試模組:用於重新編譯該指定程式的源代碼,並開始記 億體漏失測試; 除錯模組:用於當該記憶體漏失測試沒有通過時,從該測 試電腦的記憶體中搜索識別字,如果搜索到識別字則記 錄每個識別字在該指定程式源代碼中的位置;及 所述除錯模組:還用於當該記憶體漏失測試通過或者沒有 搜索到識別字時,抹除所有附加的標識區域,並重新編譯 該指定程式。 ίο 100113075 一種程式除錯系統,其中,該系統包括: 讀取模組:用於從測試電腦的記憶體中讀取指定程式的源 代碼,並將該指定程式源代碼中的預設記憶體分配函數替 換成用戶自定義記憶體分配函數; 附加模組:用於當該指定程式的一個預設記憶體分配函數 分配記憶體時,調用該用戶自定義記憶體分配函數,在該 預設記憶體分配函數的預設分配記憶體的基礎上附加一個 標識區域,並在該附加的標魏域寫人-個識別字; 測試模組:用於重新編譯該指定程式的源代碼並開始記 憶體漏失測試; 優化模組:用於當該記憶體漏失測試沒有通過時,將測試 電腦記憶體中的所有内容備份至一個檔案; 除錯模組:用於從該備份檔案中搜索識別字,如果搜索到 識別字’則記錄每個識別字在該指定程式源代碼中的位置 ;及 表單編號A0101 第22頁/共28頁 ' 1002021802-0 201241622 所述除錯模組:還用於當該記憶體漏失測試通過或者沒有 搜索到識別字時,抹除所有附加的標識區域,並重新編譯 該指定程式。 11 . 一種程式除錯系統,其中,該系統包括: 注入模組:用於將用戶自定義記憶體分配函數注入一個調 用堆疊,以替換預設的記憶體分配函數; 修改模組,用於當一個指定程式的預設記憶體分配函數分 配記憶體時,將該預設記憶體分配函數的呼叫位址修改為 該用戶自定義記憶體分配函數的位址; 附加模組:用於通過調用該用戶自定義記憶體分配函數, 在該預設記憶體分配函數的預設分配記憶體的基礎上附加 一個標識區域,並在該附加的標識區域寫入一個識別字; 測試模組:用於開始記憶體漏失測試;及 除錯模組:用於當該記憶體漏失測試沒有通過時,從該測 試電腦的記憶體中搜索識別字,如果搜索到識別字,則記 錄測試失敗内容。 12 . —種程式除錯系統,其中,該系統包括: 注入模組:用於將用戶自定義記憶體分配函數注入一個調 用堆疊,以替換預設的記憶體分配函數; 修改模組,用於當一個指定程式的預設記憶體分配函數分 配記憶體時,將該預設記憶體分配函數的呼叫位址修改為 該用戶自定義記憶體分配函數的位址; 附加模組:用於通過調用該用戶自定義記憶體分配函數, 在該預設記憶體分配函數的預設分配記憶體的基礎上附加 一個標識區域,並在該附加的標識區域寫入一個識別字; 測試模組:用於開始記憶體漏失測試; 100113075 表單編號A0101 第23頁/共28頁 1002021802-0 201241622 優化模組:用於當該記憶體漏失測試沒有通過時,將測試 電腦記憶體中的所有内容備份至一個檔案;及 除錯模組:用於從該備份檔案中搜索識別字,如果搜索到 識別字,則記錄測試失敗内容。 100113075 表單編號A0101 第24頁/共28頁 1002021802-0
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100921116A CN102736974A (zh) | 2011-04-13 | 2011-04-13 | 程序除错系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
TW201241622A true TW201241622A (en) | 2012-10-16 |
Family
ID=46992515
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW100113075A TW201241622A (en) | 2011-04-13 | 2011-04-15 | System and method for debugging programs |
Country Status (3)
Country | Link |
---|---|
US (1) | US8370815B2 (zh) |
CN (1) | CN102736974A (zh) |
TW (1) | TW201241622A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI489268B (zh) * | 2013-04-09 | 2015-06-21 | Wistron Corp | 作業系統除錯裝置和方法 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102736974A (zh) * | 2011-04-13 | 2012-10-17 | 鸿富锦精密工业(深圳)有限公司 | 程序除错系统及方法 |
GB2500707B (en) * | 2012-03-30 | 2014-09-17 | Cognovo Ltd | Multiprocessor system, apparatus and methods |
CN103914355A (zh) * | 2014-03-12 | 2014-07-09 | 汉柏科技有限公司 | 对内存重复释放进行定位的方法和装置 |
US10482007B2 (en) * | 2016-12-06 | 2019-11-19 | Noblis, Inc. | Memory allocation on non-volatile storage |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6349355B1 (en) * | 1997-02-06 | 2002-02-19 | Microsoft Corporation | Sharing executable modules between user and kernel threads |
US6675218B1 (en) * | 1998-08-14 | 2004-01-06 | 3Com Corporation | System for user-space network packet modification |
US7080172B1 (en) * | 2003-05-27 | 2006-07-18 | Marvell Luternational Ltd. | Management of memory, hardware and associated device drivers using stacks |
US7293142B1 (en) * | 2004-04-19 | 2007-11-06 | Cisco Technology, Inc. | Memory leak detection system and method using contingency analysis |
US7487321B2 (en) * | 2004-04-19 | 2009-02-03 | Cisco Technology, Inc. | Method and system for memory leak detection |
US7930491B1 (en) * | 2004-04-19 | 2011-04-19 | Cisco Technology, Inc. | Memory corruption detection system and method using contingency analysis regulation |
US7870541B1 (en) * | 2004-11-01 | 2011-01-11 | Wind River Systems, Inc. | Context tracing for software with a frame pointer and a stack pointer and with a stack pointer but without a frame pointer |
CN100533331C (zh) * | 2004-11-10 | 2009-08-26 | 英业达股份有限公司 | 一种利用识别硬件信息进行程序保护的方法 |
US20060212852A1 (en) * | 2005-03-16 | 2006-09-21 | Jinwoo Hwang | Methods, systems and computer program products for detecting memory leaks |
US7904278B2 (en) * | 2006-05-02 | 2011-03-08 | The Johns Hopkins University | Methods and system for program execution integrity measurement |
CN100468347C (zh) * | 2006-08-03 | 2009-03-11 | 西门子(中国)有限公司 | 一种在应用模块与com组件之间传递参数的方法及装置 |
US7669030B2 (en) * | 2007-07-02 | 2010-02-23 | Computer Associates Think, Inc. | System and method for finding kernel memory leaks |
KR101613971B1 (ko) * | 2009-12-30 | 2016-04-21 | 삼성전자주식회사 | 프로그램 코드의 변환 방법 |
CN102736974A (zh) * | 2011-04-13 | 2012-10-17 | 鸿富锦精密工业(深圳)有限公司 | 程序除错系统及方法 |
-
2011
- 2011-04-13 CN CN2011100921116A patent/CN102736974A/zh active Pending
- 2011-04-15 TW TW100113075A patent/TW201241622A/zh unknown
- 2011-10-31 US US13/286,086 patent/US8370815B2/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI489268B (zh) * | 2013-04-09 | 2015-06-21 | Wistron Corp | 作業系統除錯裝置和方法 |
Also Published As
Publication number | Publication date |
---|---|
US20120266028A1 (en) | 2012-10-18 |
CN102736974A (zh) | 2012-10-17 |
US8370815B2 (en) | 2013-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8918764B2 (en) | Selective trace facility | |
EP3785125B1 (en) | Selectively tracing portions of computer process execution | |
US20060288025A1 (en) | Identifying problems, usage patterns, and performance in a database interface using aspect-oriented programming | |
US20110055777A1 (en) | Verification of Soft Error Resilience | |
US10853224B2 (en) | Indexing and searching a time-travel trace for arbitrary length/arbitrary alignment values | |
US10180799B2 (en) | Efficient retrieval of memory values during trace replay | |
CN109902034B (zh) | 快照创建方法、装置、电子设备及机器可读存储介质 | |
WO2016026328A1 (zh) | 一种信息处理方法、装置及计算机存储介质 | |
TW201241622A (en) | System and method for debugging programs | |
US20060277371A1 (en) | System and method to instrument references to shared memory | |
WO2014099828A1 (en) | Test scope determination based on code change(s) | |
US20180364304A1 (en) | Stimulus generation for component-level verification | |
WO2016173172A1 (zh) | 堆内存操作的检测方法及装置 | |
TW201502985A (zh) | 檔案處理方法及裝置 | |
US11836070B2 (en) | Reducing trace recording overheads with targeted recording via partial snapshots | |
CN104461880A (zh) | 一种嵌入式系统中自动检测内存越界的方法及系统 | |
US20180341723A1 (en) | Triggering untriggered assertions in design verification | |
US9009430B2 (en) | Restoration of data from a backup storage volume | |
CN115827636A (zh) | 存储及从波形数据库读取逻辑系统设计的仿真数据的方法 | |
EP3721346B1 (en) | Bit-accurate-tracing analysis with applied memory region lifetimes | |
CN101650688A (zh) | 一种访问vm_io地址空间的方法和用户态调试器 | |
CN110825587A (zh) | 基于mcu的简易日志系统及日志管理方法 | |
WO2023145165A1 (ja) | プログラム検査装置、及びプログラム検査方法 | |
JP2006031248A (ja) | 関数呼び出しをフックしてログを生成するソフトウェア評価システム | |
CN116841463A (zh) | 存储设备的数据校验方法、装置、设备及存储介质 |