新四季網

用於資源洩漏檢測的系統和方法

2023-09-20 01:09:15 2

專利名稱:用於資源洩漏檢測的系統和方法
技術領域:
本發明涉及資源洩漏檢測,更具體而言涉及使用靜態分析來跟蹤系統資源以及檢測和報告資源洩漏的方法和系統。
背景技術:
資源洩漏典型地源於編程錯誤,其中,有限的系統資源例如輸入/輸出(I/O)流、 字體和資料庫連接從未被相應的程序釋放。結果,系統速度會降低,並且系統崩潰會發生。 儘管垃圾回收減輕了程式設計師顯式地管理存儲器的負擔,程式設計師仍顯式地管理其他有限的系統資源。資源洩漏檢測工具通過分析程序代碼並報告資源洩漏來幫助程式設計師檢測資源洩漏,以允許洩漏資源的有效識別和校正。

發明內容
本發明的示例性實施例涉及用於跟蹤程序中的資源以確定該程序是否洩漏任何資源的系統和方法。特別地,這裡公開的有效的跟蹤過程在分析程序時使用動態可調整的必須訪問路徑集合用於別名的(aliasing)目的。在本發明的一個實施例中,一種用於檢測程序中的資源洩漏的方法包括啟動對程序的控制流的分析;響應於獲取控制流中的資源,生成資源的必須訪問路徑的初始集合; 通過根據控制流分析至少添加或刪除必須訪問路徑來動態修改必須訪問路徑的集合,來跟蹤控制流中的資源;以及如果基於必須訪問路徑的集合,資源在控制流的出口不可到達 (unreachable),則確定該資源已被洩漏。在本發明的另ー示例性實施例中,一種用於檢測程序中的資源洩漏的系統包括 控制流表示生成器,被配置為生成程序的控制流表示;必須訪問路徑模塊,被配置為存儲必須訪問路徑的多個集合;跟蹤器,被配置為分析控制流並通過生成和修改必須訪問路徑的集合來跟蹤資源,從而響應於獲取控制流中的資源而生成該資源的必須訪問路徑的給定集合,且從而根據控制流分析,通過至少添加和刪除必須訪問路徑,動態調整必須訪問路徑的給定集合,以跟蹤資源;以及報告模塊,被配置為如果基於必須訪問路徑集合該資源被確定為在控制流的出口處不可到達,則報告資源被洩漏。此外,在本發明的其他實施例中,一種用於報告程序中的資源洩漏的方法包括生成程序的控制流表示;分析控制流表示來確定資源洩漏;確定資源洩漏是已見證 (witnessed)的洩漏還是由分析局限引起的潛在洩漏;以及報告資源洩漏,從而已見證的洩漏更優先於由分析局限引起的潛在洩漏。通過下列對其示例性實施例的詳細說明並結合附圖,這些以及其他特徵和優勢將
變得明顯。


本公開將參考附圖來提供優選實施例的下列說明的細節,在附圖中
圖1是示出根據本發明示例性實施例的分析的方面的控制流圖的高級框/流程圖。圖2是根據本發明示例性實施例的用於檢測程序中的資源洩漏的方法的高級框/ 流程圖。圖3是根據本發明示例性實施例的用於檢測和報告資源洩漏的系統的高級框/流程圖。圖4是根據本發明示例性實施例的用於檢測和報告資源洩漏的方法的高級框/流程圖。圖5是根據本發明示例性實施例的用於檢測資源洩漏的方法的高級框/流程圖。
具體實施例方式根據本發明的示例性實施例,可以執行靜態分析,來報告程序例如Java程序中的洩漏缺陷(bug)。這裡描述的示例性實施例可以是可在交互設置中使用的產業強度的工具, 其中它們可以在幾分鐘內處理幾百萬行代碼,並且同時具有很低的假陽性率。特別地,開源應用程式可以被靜態地分析,以檢測整個程序中的缺陷,而不是單個過程的有限範圍。這裡描述的示例性實施例足夠快地分析大型程序,例如具有10000個類的java程序。儘管垃圾回收使程式設計師免於存儲器管理的責任,但它沒有解決資源管理的問題。 在Java和類似的語言中,當程序獲取有限系統資源例如套接字或資料庫連接的實例吋,它必須通過顯式地調用dispose或close方法來釋放該實例。讓未釋放資源的最後的句柄超出範圍會洩漏資源運行時系統慢慢地耗盡系統資源的有限供應,導致性能降低和系統崩潰。但是,要保證資源總是被釋放需要技巧並容易出錯。作為例子,考慮下面表1中示出的Java程序。表1
第7行中Fi IeOutpuびtream的分配獲取了流,這是需要通過調用對流句柄的closeO來釋放的系統資源。獲得的流對象然後進入OutputMreamWriter的構造函數,構造函數將它記在一私有欄位。OutputMreamWriter對象轉而進入I^rintfeiter的構造函數。在finally塊中,程式設計師調用對I^rintfeiter對象的closeO。該closeO 函數調用對「嵌套的」 OutputStreamffriter對象的close ,該對象轉而調用對嵌套的 FileOutpuびtream對象的closeO。通過使用finally,看來程序關閉了流,即使是在發生異常吋。但是,一潛在的資源洩漏隱藏在該程序中。OutputMreamWriter的構造函數可能拋出異常注意到程式設計師預期UnsupportedEncodingExc印tion可能會發生。如果確實發生了該異常,在第5行中對變量out的賦值不會執行,結果在第7行中分配的流再也不會被關閉。資源管理缺陷在Java中很常見,這有幾個原因。首先,由於對垃圾回收器的角色的含混,程式設計師可能忽略對closeO的調用。其次,即使是很仔細的程式設計師也可能容易忘記釋放沿著所有可能的異常路徑的所有資源,如表1所示的那樣。最後,程式設計師需要理解所有相關的API契約(contract)。在上面的例子中,程式設計師正確地理解了關閉I^rintfeiter實例會通過級聯的closeO調用來關閉嵌套的資源。但是,級聯的close並不是在所有API 中普遍的,程式設計師很容易做出錯誤的假設。本發明的示例性實現包括可伸縮而有用的基於靜態分析的洩漏檢測工具。它們是有用的,因為工具生成的報告是用戶可行動的(actionable),而不僅僅是全面的。此外,它們是可伸縮的,因為這些實現能處理包含數萬個類的真實世界的Java應用。本發明的示例性特徵包括可伸縮的過程間分析的執行。關於別名的過程間推理(reasoning)是建立有用的資源洩漏檢測工具的ー個因素。例如,在圖1示出的程序中,本發明的示例性實施例可以推理在OutputMreamWriter的closeO方法中釋放的 FileOutputStream的實例實際上是在OutputMreamWriter對象被構造時被附加到該 OutputStreamffriter對象的同一實例。在分析具有數萬個類的應用程式吋,這樣的推理會是很難實現的,因為這樣規模的程序阻礙了對足夠精確的全程序別名分析的計算。本發明的實施例可以通過在有效的過程間數據流分析的上下文中使用訪問路徑來跟蹤相關的別名信息,來迴避一般的別名分析問題。令人驚奇地,通過經驗觀察到,稀疏跟蹤的別名信息可以提供很高的精確性。其他的示例性特徵解決了假陽性的問題。假陽性一般會在保證可靠性 (soundness)的任何工具中發生。但是,如果缺陷查找工具產生太多的假陽性,用戶將簡單地傾向於忽略結果。與目標是確定代碼是否有特定種類錯誤的驗證工具不同,缺陷查找エ 具應當優先考慮比其他報告更可能是真陽性的報告。示例性實施例可以通過保持下列記錄來提供這樣的優先級排序缺陷是否沿相同的路徑被見證,或者它是否是由於分析的限制而被假設的。根據經驗,可以看到由分析限制引起的缺陷更可能是假陽性。示例性實施例還可以解決資源管理問題相關的問題。例如,關於嵌套的資源,僅僅跟蹤基本系統資源是不夠的,因為用戶需要採取的校正行為可能是對嵌套了資源實例的對象調用close方法。例如,假設在表1示出的程序中,OutputMreamWriter的構造函數不能拋出異常,而是程式設計師忘記了包括out. closeO。即使真實的資源是FileOutputMream而不是OutputMreamWriter或I^rintfeiter,在該情形下,程式設計師一般更希望報告指明out應被關閉,而不是FileOutputMream的匿名實例。如這裡下面所討論,本發明的示例性實施例提供了報告,其使得合適的彌補動作更明顯。本發明的示例性實施例考慮的其他方面是異常流。例如,如表1中提供的程序所示,程式設計師在使用try-catch-finally塊時經常出錯。因此,資源洩漏工具應該特別關注那裡所隱藏的缺陷。報告所有可能的運行時錯誤所引起的洩漏會將用戶淹沒於不感興趣的結果中。但是,程式設計師期望發生的那些異常路徑應該被解決。例如,程式設計師會典型地忽略基於OutOfMemoryException的洩漏報告,因為大多數程序不會被期望來處理這樣嚴重的異常。相反,基於信任的探試法可以被用來抑制由異常流引起的報告,除非分析發現可信的證據來證明該報告是正當的。現在將參考圖1中提供的用於表1中示出的程序的示例性控制流圖100來一般地以高級別示出示例性系統和方法如何可分析表1中示出的程序。在控制流圖100中,行數102對應於表1中提供的程序的行數,虛線邊104表示異常流並用表示其攜帶的異常類型的標籤106來標記,點線邊108表示流程間的控制流轉移。需要注意OOM對應於存儲器不足異常,UEE對應於不支持的編碼異常,且IOE對應於輸入/輸出異常。在本發明的示例性方法和系統實施例中,分析可以將控制流圖(CFG)以及獲取和釋放系統資源的過程的規範作為輸入。圖1示出了用於表1中的程序的CFG的相關部分110以及某些被調用的方法的CFG 120-126。臨時變量tl和t2在構造CFG 110時被引入。該例子中的規範聲明了 FileOutputMream的構造函數分配了資源,以及相應的closeO釋放了它。該特殊分析的目標是為了確立在第7行上的資源分配跟隨著在到出口的所有可能執行路徑上的釋放;當這個屬性不成立時,就存在可能的洩露。方法和系統的實施例可以符號性地跟蹤CRi中的路徑中的每個資源,直到a)它被釋放,或者b)它變得不可到達而沒有被釋放,並由此洩漏。考慮從第7行上的資源分配開始的程序路徑7-6-5-11-14-15。下面兩行涉及由構造函數調用引起的過程間跟蹤。第6行上的構造函數將其參數存入到實例欄位a。分析可以推斷,在第6行之後,表達式t2. a和tl都指向被跟蹤的資源。第5行上的構造函數將其參數存入到實例欄位b。分析類似地可以推斷,在第5行之後,表達式out.b. a也指向被跟蹤的資源。第15行上的調用out. close 傳遞地調用對表達式out. b和out. b. a的close (注意CFG 124和126中的this將被合適地綁定),最後一個釋放了被跟蹤的資源,因為它等於tl。此時,表達式tl、t2. a和out. b. a所引用的資源被釋放,並因此不再被跟蹤。為了有效,方法和系統實施例能夠證明CFG 1 中的this, a等於CFG 110中分配的tl。這涉及精確的過程間必須別名(must-alias)推理。示例性方法和系統實施例使用選擇性相等謂詞(equality predicate),而不用依靠全程序別名分析,來執行必須別名推理。現在參考異常路徑7-6-8-9-11-14-15-出口,在第15行上,表達式out指向第9行上分配的對象,並且不等於第7行上分配的資源tl。在過程出口處,表達式tl仍然指向來自第7行的未釋放的資源,且沒有其他表達式可指向該資源。由於tl在過程出口處超出範圍,可以推斷在第7行分配的資源無法到達、未被釋放且洩漏了。
關於路徑7-6-5-11-14-出口,其中第14行上的分支沒有被採取,如果分析可以證明假輸出是不可能的,該路徑是不可行的;如果分析不能證明,它會報告洩漏。示例性系統和方法實施例可以避免該假陽性。對於路徑7-6-14-出口,其中OutOfMemoryExc^ption在第6行發生,資源會沿該路徑發生洩漏。但是,根據用戶的決定,方法和系統實施例可以抑制沿著與不常見的嚴重異常相關的異常流的問題,如下面更為詳細地討論的。現在參考下面提供的表2的算法1,示出了根據本發明的示例性實施例的特定分析過程。需要注意,這裡描述的示例性實施例可以以多種方式實現。如本領域技術人員所理解的,本發明的方面可以被實現為系統、方法或程序產品。相應地,本發明的各方面可以採取完全硬體實施例、完全軟體實施例(包括固件、駐留軟體、微代碼等)或組合了軟體和硬體方面的實施例的形式,所有這些軟體和硬體方面在此通常被稱為「電路」、「模塊」或「系統」。此外,本發明的方面可以採取體現在一個或多個計算機可讀介質(在介質中具有計算機可讀程序代碼)中的電腦程式產品的形式。可以使用一個或多個計算機可讀介質的任意組合。所述計算機可讀介質可以是計算機可讀信號介質或計算機可讀存儲介質。計算機可讀存儲介質例如可以是(但不限於)電、磁、光、電磁、紅外線或半導體系統、裝置或設備或上述任何適合的組合。計算機可讀存儲介質的更具體的示例(非窮舉列表)可以包括以下項具有一條或多條線的電連接、可攜式計算機軟盤、硬碟、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦寫可編程只讀存儲器(EPR0M或快閃記憶體)、光纖、可攜式光碟只讀存儲器(CD-ROM)、光存儲設備、磁存儲設備或上述任何適合的組合。在本文檔的上下文中,計算機可讀存儲介質可以是任何能夠包含或存儲由指令執行系統、裝置或設備使用或與所述指令執行系統、裝置或設備結合的程序的有形介質。計算機可讀信號介質可以包括其中包含計算機可讀程序代碼(例如,在基帶中或作為載波的一部分)的傳播數據信號。此類傳播信號可以採取多種形式中的任何一種,包括但不限於電磁、光或上述任何適合的組合。計算機可讀信號介質可以是任何並非計算機可讀存儲介質以及傳送、傳播或傳輸由指令執行系統、裝置或設備使用或與所述指令執行系統、裝置或設備結合的程序的計算機可讀介質。可以使用任何適當的介質(包括但不限於無線、線纜、光纜、RF等或上述任何適合的組合)來傳輸計算機可讀介質中包含的程序代碼。用於執行本發明的方面的操作的電腦程式代碼可以使用一種或多種程式語言的任意組合來編寫,所述程式語言包括諸如Java、Smalltalk, C++或類似語言之類的面向對象的程式語言或者諸如「C」程式語言或類似的程式語言之類的常規過程程式語言。所述程序代碼可以完全地在用戶計算機上執行,部分地在用戶計算機上執行,作為獨立的軟體包執行,部分地在用戶計算機上並部分地在遠程計算機上執行,或者完全地在遠程計算機或伺服器上執行。在後者的情況中,所述遠程計算機可以通過包括區域網(LAN)或廣域網(WAN)的任何類型網絡與用戶的計算機相連,也可以與外部計算機進行連接(例如,使用網際網路服務提供商通過網際網路連接)。下面參考根據本發明的實施例的方法、裝置(系統)和電腦程式產品的流程圖和/或方塊圖對本發明的方面進行描述。將理解,所述流程圖和/或方塊圖的每個方塊以及所述流程圖和/或方塊圖中的方塊的組合可以由電腦程式指令來實現。這些計算機程
9序指令可以被提供給通用計算機、專用計算機或其他可編程數據處理裝置的處理器以產生機器,以便通過所述計算機或其他可編程數據處理裝置的處理器執行的所述指令產生用於實現在一個或多個流程圖和/或方塊圖方塊中指定的功能/操作的裝置。這些電腦程式指令也可以被存儲在引導計算機、其他可編程數據處理裝置或其他設備以特定方式執行功能的計算機可讀介質中,以便存儲在所述計算機可讀介質中的所述指令產生一件包括實現在所述一個或多個流程圖和/或方塊圖方塊中指定的功能/操作的指令的製品。所述電腦程式指令還可被加載到計算機、其他可編程數據處理裝置或其他設備,以導致在所述計算機、其他可編程裝置或其他設備上執行一系列操作步驟以產生計算機實現的過程,從而在所述計算機或其他可編程裝置上執行的指令提供用於實現在一個或多個流程圖和/或方塊圖方塊中指定的功能/操作的過程。過程內分析回到表2中的算法1,如上所示,可以以至少兩種方式由該過程實現顯著程度的效率。首先,與對於整個程序預計算(pre-computing)別名或藉助於使用不精確的別名信息(兩者都可能產生大量的假陽性)不同,該分析可以在以完全合適的方式分析程序時動態地(on-the-fly)生成並使用最小別名信息集合。其次,與在整個程序中跟蹤資源不同,資源可以僅在相關的程序部分中被跟蹤。例如,資源可以在其被獲取的位置和其被釋放或變得不可到達的位置之間被跟蹤。表2
控制流圖可以用下列類型的抽象語句來描述entry、exit、ρ = acquire R、release R q、branch c L、p = new T、p = q. f >p. f = q、p = q、以及調用語句 invoke。為了清楚起見,可以假設分配和釋放語句的方法調用被抽象地重寫為獲取(acquire)和釋放(release)語句,例如,ρ = new FiIeOutputStream(file)可以被表示為ρ = acquire FileOutputStreaminvoke p. 此外,語句p. close 被表示為release FileOutputStream ρinvoke p. close 該分析假設每個局部變量,例如p,具有單個靜態賦值(SSA)。抽象的ρ = q語句被包括來描述在SSA轉換中引入的φ-節點的處理,並對過程調用中的值從實參(actual)到形參(formal)的傳遞進行建模。分支語句,分支c L,具有條件表達式c和跳轉目標L。需要注意,因為這裡使用的SSA變量僅在單個過程中唯一,調用者值數字(value number)應該避免與被調用者值數字混淆。一般數據流分析如表2所示,算法1在如算法的行中指示的類型i^act的事實(fact)冪集格(powerset lattice)上執行迭代的數據流3元組,其包含SSAVariable (這是SSA值數字)、ResourceType (這是資源的類型)、以及Mate。State表示在i^act中包含的有限數量的輔助信息,用以幫助解決算法將要執行的詢問。下面給出了 Mate的具體描述,但是這時候可以假設它包含局部變量上的謂詞。算法使用下列輔助函數initialState(p =SSAVariable) -initalState (ρ =SSAVariable)基於給定的 SSA變量來創建Mate的元素。isMustAlias(p =SSAVariable, q =SSAVariable, a Jtate)-該函數意味著,給定 a中的信息,P等於q。如果該檢查失敗,則該分析不認為在其上釋放被調用的變量會強烈關閉P所引用的資源。對該詢問的保守回答為假。isConsistent (condition :Expression,a :State)。根據該函數,condition,作為條件表達式(Expression),與a中的信息不矛盾。該函數被用來裁剪不可行的路徑。對該詢問的保守回答是真。isUnreachable (a =State, ρ =SSAVariable)。該函數意味著根據 a 中的信息,ρ 所引用的資源不再可由任何活動名稱(live name)訪問。在過程出口處,局部變量被認為變為死的,除非另外在a中保留。對該詢問的保守回答是假。如表2中的算法1所示,第5-8行用對應於資源分配的初始事實來對分析下種(seed)。算法然後將這些事實在程序語句中傳播,沿路創建新的事實。第M-25行示出了其他指針(pointer)語句例如p. f = q對Mate的影響;這些影響在下面更詳細地描述。算法收斂,因為沒有事實從映射表(map)D中刪除,並且i^act的每個成分是有限的。State本發明的示例性實施例可以將Mate實現為到被跟蹤資源的must-access-path集合。must-access-path是由變量以及緊跟著的(可能空的)欄位名序列組成的表達式,從而該表達式的值引用資源。例如,上面提到的out. b. a是must-access-path。下面提供的表3示出了名稱為in的must-access-path集合如何被單獨的程序語句變換(transform)。表 權利要求
1.一種用於檢測程序中的資源洩漏的方法,包括 啟動(50 對程序的控制流的分析;響應於獲取控制流中的資源,生成(504)用於該資源的必須訪問路徑的初始集合; 根據控制流分析,通過至少添加或移除必須訪問路徑來動態調整必須訪問路徑集合, 來跟蹤(506)控制流中的資源;以及如果基於必須訪問路徑集合,所述資源在控制流出ロ處不可到達,則確定(512)該資源被洩漏。
2.如權利要求1所述的方法,還包括響應於確定必須訪問路徑集合中的任何變量釋放了所述資源,在到達控制流的出口之前停止(508)對該資源的跟蹤。
3.如權利要求1所述的方法,其中,所述跟蹤包括在過程間調用中跟蹤資源。
4.如權利要求3所述的方法,其中,只有當過程間調用引起必須訪問路徑集合中的修改或當過程間調用引起該資源的釋放時,該資源才會在過程間調用中被跟蹤。
5.如權利要求4所述的方法,其中,所述調整還包括為過程間調用中使用的變量添加必須訪問路徑。
6.如權利要求1所述的方法,其中,如果必須訪問路徑集合是空的,則所述資源不可到TSo
7.如權利要求1所述的方法,其中,所述跟蹤(508)還包括通過基於必須訪問路徑集合,評定用於採取分支的條件是否為真,來確定分支是否被採取。
8.如權利要求1所述的方法,還包括如果所述必須訪問路徑集合包含的必須訪問路徑的數量超過第一閾值或者如果該集合包含的必須訪問路徑的長度超過第二閾值,則通過清空該集合來過濾(510)必須訪問路徑集合。
9.如權利要求1所述的方法,其中,所述跟蹤忽略預定類型的異常路徑。
10.ー種包含用於檢測測試程序中的資源洩漏的計算機可讀程序的計算機可讀存儲媒介,其中,所述計算機可讀程序在計算機上執行時使得計算機啟動(50 對測試程序的控制流的分析;響應於獲取控制流中的資源,生成(504)用於該資源的必須訪問路徑的初始集合; 根據控制流分析,通過至少添加或移除必須訪問路徑來動態調整必須訪問路徑集合, 來跟蹤(506)控制流中的資源;以及如果基於必須訪問路徑集合,所述資源在控制流出ロ處不可到達,則確定(512)該資源被洩漏。
11.一種用於檢測資源洩漏的系統,包括控制流表示生成器(314),被配置為生成程序的控制流表示; 必須訪問路徑模塊(320),被配置為存儲必須訪問路徑的多個集合; 跟蹤器(318),被配置為分析控制流並通過生成和調整必須訪問路徑集合來跟蹤資源, 從而響應於獲取控制流中資源生成用於該資源的給定必須訪問路徑集合,且從而根據控制流分析,通過至少添加或移除必須訪問路徑來動態地調整給定必須訪問路徑集合,以跟蹤資源;以及報告模塊(322),被配置為如果基於必須訪問路徑集合確定所述資源在控制流出ロ 處不可到達,則報告資源被洩漏。
12.如權利要求11所述的系統,其中,所述跟蹤器(318)還被配置為響應於給定必須訪問路徑集合中的任何變量釋放了所述資源,則在到達控制流的出口之前停止對資源的跟fe; ο
13.如權利要求11所述的系統,其中,所述跟蹤器(318)還被配置為在過程間調用中跟蹤資源。
14.如權利要求13所述,其中,只有當過程間調用引起必須訪問路徑集合中的修改或當過程間調用引起所述資源的釋放時,該資源才會在過程間調用中被跟蹤。
15.如權利要求14所述的系統,其中,所述調整還包括為過程間調用中使用的變量添加必須訪問路徑。
16.如權利要求11所述的系統,其中,如果給定必須訪問路徑集合是空的,則所述資源不可到達。
17.如權利要求11所述的系統,其中,所述跟蹤器還被配置為基於給定必須訪問路徑集合,通過評定用於採取分支的條件是否為真,來確定分支是否被採取。
18.如權利要求11所述的系統,其中,所述跟蹤器(318)還被配置為如果所述給定集合包含的必須訪問路徑的數量超過第一閾值或者如果該集合包含的必須訪問路徑的長度超過第二閾值,則通過清空該給定集合來過濾該給定必須訪問路徑集合。
19.如權利要求11所述的系統,其中,所述跟蹤器還被配置為在分析期間忽略預定類型的異常路徑。
20.一種用於報告程序中的資源洩漏的方法,包括生成(40 程序的控制流表示;分析(404)該控制流表示,來確定資源洩漏;確定G06)資源洩漏是已見證的洩漏還是由分析限制引起的潛在洩漏;以及報告G08)資源洩漏,從而已見證的洩漏更優先於由分析限制引起的潛在洩漏。
21.如權利要求20所述的方法,其中,所述確定(406)包括確定任何洩漏是否是嵌套資源的洩漏,且其中所述報告還包括報告嵌套資源洩漏的至少ー個包裝器。
22.如權利要求21所述的方法,其中,所述報告(408)還包括對其中嵌套了資源洩漏的包裝器進行聚類。
23.如權利要求20所述的方法,其中,所述報告(408)還包括過濾掉由於預定類型的異常路徑產生的洩露。
24.如權利要求20所述的方法,其中,所述分析(404)還包括啟動對程序的控制流的分析;響應於獲取控制流中的資源,生成用於該資源的必須訪問路徑的初始集合。根據控制流分析,通過至少添加或移除必須訪問路徑來動態調整必須訪問路徑集合, 來跟蹤控制流中的資源;以及如果基於必須訪問路徑集合該資源在控制流出ロ處不可到達,則確定該資源被洩漏。
25.一種計算機可讀存儲媒介,包括用於報告測試程序中的資源洩漏的計算機可讀程序,其中,所述計算機可讀程序在計算機上執行時使得計算機生成(40 測試程序的控制流表示; 分析(404)該控制流表示,來確定資源洩漏;確定(406)該資源洩漏是已見證的洩漏還是由分析限制引起的潛在洩漏;以及報告(408)資源洩漏,從而已見證的洩漏更優先於由分析限制引起的潛在洩漏。
全文摘要
公開了一種使用靜態分析來檢測(404)程序中的資源洩漏的系統和方法。可以將動態可調整的必須訪問路徑集合用於(406)別名的目的,以在程序的過程內和過程間跟蹤資源。還公開了可行動的報告(408),其中,資源洩漏被優先級排序、過濾、聚類,以提高可用性。
文檔編號G06F12/00GK102597970SQ201080049854
公開日2012年7月18日 申請日期2010年7月30日 優先權日2009年11月3日
發明者E·託爾拉克, S·錢德拉 申請人:國際商業機器公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀