欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

可基于進(jìn)程定制調(diào)試器的即時(shí)調(diào)試的方法和系統(tǒng)的制作方法

文檔序號:6612733閱讀:212來源:國知局
專利名稱:可基于進(jìn)程定制調(diào)試器的即時(shí)調(diào)試的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及軟件的調(diào)試技術(shù),特別地,涉及可基于進(jìn)程定制調(diào)試器的 即時(shí)調(diào)試的方法和系統(tǒng)。
背景技術(shù)
在軟件開發(fā)生命周期中, 一個(gè)bug指編程或邏輯錯(cuò)談引起的程序異常。 對于某些特殊領(lǐng)域,如軍事、醫(yī)療以及金融行業(yè), 一個(gè)看似微不足道的bug 可能會(huì)帶來難以估量的損失。正是由于這種潛在的巨大風(fēng)險(xiǎn)使得所有商業(yè) 軟件在發(fā)布之前都要進(jìn)行盡可能徹底的測試及調(diào)試。然而,軟件復(fù)雜性的增加卻帶來了越來越多的難以重現(xiàn)或偶然出現(xiàn)的 bug。開發(fā)人員無法預(yù)知上述bug什么時(shí)候會(huì)出現(xiàn),它們有可能只在某些 特定的系統(tǒng)出現(xiàn),或是在程序啟動(dòng)并運(yùn)行很久之后才會(huì)出現(xiàn),比如一個(gè)小 時(shí),有時(shí)甚至幾天。更有甚者,部分bng可能在程序被調(diào)試器監(jiān)控時(shí)就消 失了。在本發(fā)明中,運(yùn)行時(shí)bug將被用來指代上述程序缺陷。傳統(tǒng)調(diào)試器對于運(yùn)行時(shí)bug的調(diào)試幫助甚少,因?yàn)樵谝粋€(gè)運(yùn)行時(shí)bug 出現(xiàn)之后才啟動(dòng)調(diào)試器已經(jīng)為時(shí)過晚,此時(shí)出現(xiàn)bug的程序的上下文已經(jīng) 不再可用。即時(shí)調(diào)試(Just-In-Time Debugging, JIT debugging)的出現(xiàn)正 是為了解決上述問題。即時(shí)調(diào)試是在運(yùn)行時(shí)bug出現(xiàn)時(shí)自動(dòng)啟動(dòng)調(diào)試器進(jìn) 行調(diào)試的技術(shù)。其已經(jīng)成為現(xiàn)代調(diào)試器不可缺少的組成部分。迄今為止, 已經(jīng)有部分方法或系統(tǒng)被用來提供即時(shí)調(diào)試。在這些方法或系統(tǒng)中,借助 異常處理鉤子函數(shù)提供即時(shí)調(diào)試以及借助特定操作系統(tǒng)的異常機(jī)制提供即 時(shí)調(diào)試是兩種廣泛使用的方法。美國專利US5526485提出的借助異常處理鉤子函數(shù)提供即時(shí)調(diào)試的方
法,主要為了解決Windows3.1操作系統(tǒng)不能針對程序錯(cuò)誤加載并運(yùn)行調(diào) 試程序的問題。圖l顯示了借助異常處理鉤子函數(shù)提供即時(shí)調(diào)試方法的整 個(gè)流程。在該方法中,借助一個(gè)名為TOOLHELP的應(yīng)用程序接口庫的支 持, 一個(gè)常駐內(nèi)存的監(jiān)視程序向操作系統(tǒng)注冊相應(yīng)的異常處理函數(shù)。當(dāng)某 個(gè)異常出現(xiàn)時(shí),操作系統(tǒng)將調(diào)用監(jiān)視程序先前注冊的異常處理函數(shù)即回調(diào) 函數(shù)。之后,監(jiān)視程序?qū)⑻崾居脩羰欠裾{(diào)試目標(biāo)程序。如果用戶選擇調(diào)試 目標(biāo)程序,那么監(jiān)視程序的回調(diào)函數(shù)將啟動(dòng)一個(gè)事先配置的調(diào)試器供用戶 進(jìn)行交互式調(diào)試。該方法存在下述幾個(gè)問題(1) 該方法引入了輔助即時(shí)調(diào)試的監(jiān)視程序。該監(jiān)視程序必須在目標(biāo) 程序啟動(dòng)之前被加載并且常駐內(nèi)存。盡管該監(jiān)視程序可能不會(huì)消耗過多的 系統(tǒng)資源,但是在許多實(shí)際應(yīng)用中這顯然是不可取的,因?yàn)楸O(jiān)視程序常駐 系統(tǒng)內(nèi)存以及其所消耗的系統(tǒng)資源可能會(huì)對目標(biāo)程序產(chǎn)生影響,從而無法 進(jìn)行有效調(diào)試;(2) 該方法不是面向特定進(jìn)程的。其面向的是所有系統(tǒng)中的進(jìn)程,這 使得用戶疲于應(yīng)付來自他們根本不關(guān)心的其余進(jìn)程的大量提示信息;(3) 該方法缺乏靈活的可定制性。在監(jiān)視程序被加載進(jìn)入內(nèi)存之后, 注冊了的異常處理函數(shù)只能保持不變。如果用戶在同一調(diào)試會(huì)話中的不同 調(diào)試階段的需求發(fā)生變化時(shí),用戶將不得不修^視程序并重新加載該監(jiān) 視程序。然而,這必將會(huì)破壞一個(gè)即時(shí)調(diào)試會(huì)話的完整性;(4) 該方法基于TOOLHELP函數(shù)庫。因此,可能會(huì)有大量不同的應(yīng) 用程序注冊了同一類型的異常處理函數(shù)。當(dāng)某個(gè)此類異常出現(xiàn)時(shí),操作系 統(tǒng)將順序調(diào)用已注冊的處理函數(shù)直到某個(gè)處理函數(shù)返回特定的值表明該異 常已被處理。如此以來, 一個(gè)原本應(yīng)該被監(jiān)視程序捕獲的異常中斷可能被 其它應(yīng)用程序注冊的異常處理函數(shù)所捕獲,從而使得用戶失去對目標(biāo)程序 進(jìn)行即時(shí)調(diào)試的機(jī)會(huì);(5) 該方法不能提供軟件中斷所帶來的運(yùn)行時(shí)bug的即時(shí)調(diào)試。 另外一種方法,借助操作系統(tǒng)的異常機(jī)制提供即時(shí)調(diào)試的方法被Microsoft Windows操作系統(tǒng)廣泛使用,包括Windows 2000/XP/NT。該方 法基于Microsoft Windows操作系統(tǒng)的內(nèi)嵌異常處理機(jī)制。參見 http:〃msdn2.microsoft.com/eii-us/librarv/5hs4b7a6.asi3x0該方法需要利用 Microsoft Windows操作系統(tǒng)的一種稱為"異常處理"的機(jī)制。該機(jī)制中, 當(dāng)一個(gè)諸如段錯(cuò)誤的異常出現(xiàn)時(shí),內(nèi)核將通知產(chǎn)生該異常的當(dāng)前執(zhí)行程序, 當(dāng)前執(zhí)行程序獲得自我糾錯(cuò)的機(jī)會(huì)即第一次異常處理機(jī)會(huì)。如果應(yīng)用程序 不能處理或糾正該異常,操作系統(tǒng)將試圖進(jìn)行第二次異常處理或最終異常 處理。如果異常仍然不能被正確處理,在終止該應(yīng)用程序之前,系統(tǒng)將采 用內(nèi)嵌機(jī)制啟動(dòng)一個(gè)輔助應(yīng)用程序。通常,該輔助應(yīng)用程序能夠"附加" 到目標(biāo)程序并獲取處于錯(cuò)誤狀態(tài)的目標(biāo)程序的狀態(tài)信息。借助操作系統(tǒng)的異常機(jī)制提供即時(shí)調(diào)試的方法利用上述機(jī)制,開發(fā)一 個(gè)可執(zhí)行程序(例如Microsoft Visual Studio提供的vsjit.exe)并將注冊表 中特定的注冊表項(xiàng)設(shè)置為該可執(zhí)行程序的安裝路徑。 一旦某個(gè)異常在第二 次異常處理中沒被正確處理,內(nèi)核將獲取特定的注冊表項(xiàng)的值并加載相應(yīng) 的可執(zhí)行程序。之后,通知用戶并依據(jù)用戶選擇決定是否加載相應(yīng)的調(diào)試 器。盡管借助操作系統(tǒng)的異常機(jī)制提供即時(shí)調(diào)試的方法在某些方面優(yōu)于借 助異常處理鉤子函數(shù)提供即時(shí)調(diào)試的方法,例如,無須注冊異常處理函數(shù), 不存在需要常駐內(nèi)存的監(jiān)視程序也無須在啟動(dòng)目標(biāo)程序之前啟動(dòng)輔助程 序,但是借助操作系統(tǒng)的異常機(jī)制提供即時(shí)調(diào)試的方法僅僅能夠捕獲致命 的異常。然而在調(diào)試過程中,用戶關(guān)注的不僅僅只是這些致命的異常,還 需要關(guān)注部分常規(guī)異常,即部分能被第一次異常處理過程正確處理的異常。 如果目標(biāo)程序收到一個(gè)在當(dāng)前條件下不該收到的異常,那么該方法將不能 提供任何幫助。并且,借助操作系統(tǒng)的異常機(jī)制提供即時(shí)調(diào)試的方法同樣 不能提供軟件中斷所帶來的運(yùn)行時(shí)bug的即時(shí)調(diào)試。發(fā)明內(nèi)容現(xiàn)有的上述技術(shù)方案都存在不足。其中,操作系統(tǒng)內(nèi)核對可定制的面 向特定進(jìn)程的即時(shí)調(diào)試支持的不足是造成這種現(xiàn)狀的主要因素。如果操作
系統(tǒng)內(nèi)核能夠?yàn)檫\(yùn)行于系統(tǒng)之上的應(yīng)用程序提供強(qiáng)大的即時(shí)調(diào)試支持,那 么即時(shí)調(diào)試會(huì)得到較大的改進(jìn)。本發(fā)明從操作系統(tǒng)的角度出發(fā),改進(jìn)操作系統(tǒng)為應(yīng)用程序提供的即時(shí) 調(diào)試的支持并提供可定制的面向特定進(jìn)程的即時(shí)調(diào)試能力。相對于現(xiàn)有技術(shù),本發(fā)明的優(yōu)點(diǎn)在于(1)對目標(biāo)程序沒有任何侵入性。沒有任何額外的應(yīng)用程序需要在加 載目標(biāo)程序之前加載,也無須常駐內(nèi)存。只有發(fā)生了用戶關(guān)注的事件并在 該事件被處理之前,調(diào)試器才會(huì)被加載。(2 )面向特定進(jìn)程,使得為不同的進(jìn)程提供不同的即時(shí)調(diào)試支持變得 非常靈活。(3)為操作系統(tǒng)提供了一個(gè)新的可定制(例如,可以在需要時(shí)更改事 件的處理函數(shù))的事件處理機(jī)制。根據(jù)本發(fā)明的一個(gè)方面,提供了一種在操作系統(tǒng)內(nèi)可基于進(jìn)程定制調(diào) 試器的即時(shí)調(diào)試的方法,包括響應(yīng)于操作系統(tǒng)內(nèi)核事件的一陷阱事件的發(fā)生,獲得進(jìn)程即時(shí)調(diào)試相 關(guān)信息;根據(jù)獲得的進(jìn)程即時(shí)調(diào)試相關(guān)信息,調(diào)用該進(jìn)程對應(yīng)的調(diào)試器。 根據(jù)本發(fā)明的另 一個(gè)方面,提供了 一種在操作系統(tǒng)內(nèi)可基于進(jìn)程定制調(diào)試器的即時(shí)調(diào)試的系統(tǒng),包括獲取器,用于響應(yīng)于操作系統(tǒng)內(nèi)核事件的一陷阱事件的發(fā)生,獲得進(jìn)程即時(shí)調(diào)試相關(guān)信息;調(diào)用器,用于根據(jù)獲得的進(jìn)程即時(shí)調(diào)試相關(guān)信息,調(diào)用該進(jìn)程對應(yīng)的調(diào)試器。根據(jù)本發(fā)明的又一方面,提供了一種程序產(chǎn)品,包含程序代碼,用于 實(shí)現(xiàn)說明書中所述的方法以及承載該程序代碼的承栽介質(zhì)。


通過對附圖中本發(fā)明示例實(shí)施例方式的更詳細(xì)描述,本發(fā)明的上述、
以及其它目的、特征和優(yōu)勢將變得更加明顯,其中,相同的參考標(biāo)號通常 代表本發(fā)明示例實(shí)施例方式中的相同部件。圖1示意性示出了借助異常處理鉤子函數(shù)提供即時(shí)調(diào)試方法的整個(gè)流程5圖2示意性示出了操作系統(tǒng)內(nèi)核事件的事件分發(fā)處理流程和陷阱事 件處理流程;圖3示意性示出了在操作系統(tǒng)中可基于進(jìn)程定制調(diào)試器的即時(shí)調(diào)試 的方法5充禾呈;圖4示意性示出了一種配置了即時(shí)調(diào)試信息的可執(zhí)行文件格式; 圖5示意性示出了進(jìn)程表和進(jìn)程控制塊之間的相互關(guān)系; 圖6示意性示出了添加了即時(shí)調(diào)試信息的擴(kuò)展進(jìn)程控制塊; 圖7示意性示出了即時(shí)調(diào)試^f言息列表; 圖8示意性示出了進(jìn)程在內(nèi)存中的空間; 圖9示意性示出了修改后的進(jìn)程在內(nèi)存中的空間;以及 圖10示意性示出了一種在操作系統(tǒng)內(nèi)可基于進(jìn)禾呈定制調(diào)試器的即時(shí) 調(diào)試的系統(tǒng)。
具體實(shí)施例方式將參照附圖更加詳細(xì)地描述本發(fā)明的優(yōu)選實(shí)施方式,在附圖中顯示了 本發(fā)明的優(yōu)選實(shí)施例。然而,本發(fā)明可以以各種形式實(shí)現(xiàn)而不應(yīng)該理解為 被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了使本發(fā)明更加 透徹和完整,并且,完全將本發(fā)明的范圍傳*本領(lǐng)域的技術(shù)人員。現(xiàn)有技術(shù)中,操作系統(tǒng)提供的中斷(Interrupt)和異常(Exceptions)機(jī)制 是導(dǎo)致程序出現(xiàn)運(yùn)行時(shí)bug的主要因素。因此,當(dāng)談及運(yùn)行時(shí)bug時(shí),有 必要區(qū)分計(jì)算機(jī)系統(tǒng)內(nèi)的中斷和異常機(jī)制。 一個(gè)中斷是一個(gè)異步事件,它 可能在任何時(shí)候出現(xiàn)并且可能與處理器正在執(zhí)行的程序無關(guān)。中斷主要由 1/0設(shè)備、處理器時(shí)鐘或定時(shí)器產(chǎn)生,并且可以被開啟或關(guān)閉。相對而言, 一個(gè)異常則是由特定指令序列的執(zhí)行所引起的同步事件。在同等M下,
程序處理同樣的數(shù)據(jù)可以再現(xiàn)同樣的異常。硬件或軟件均可以產(chǎn)生中斷和異常。例如, 一個(gè)硬件問題會(huì)導(dǎo)致系統(tǒng)總線餘溪異常,而除零異常則是軟件缺陷導(dǎo)致的結(jié)果。同樣的, 一個(gè)I/O 設(shè)備會(huì)產(chǎn)生一個(gè)中斷,或是內(nèi)核本身也會(huì)產(chǎn)生軟件中斷(例如Linux上的定 時(shí)器或是信號機(jī)制)。在所有的中斷和異常中,軟件中斷和硬件或軟件異常這兩類事件是導(dǎo) 致運(yùn)行時(shí)bug的最重要因素軟件中斷是對硬件中斷的模擬。不同的操作系統(tǒng)都會(huì)提供不同的軟件 中斷機(jī)制,例如Microsoft Windows中的ADC (Asynchronous Procedure Call Interrupts,即異步過程調(diào)用中斷)或DPC ( Deferred Procedure Call Interrupts或Dispatched Procedure Call Interrupts即延遲過程調(diào)用中斷) 機(jī)制,以及類Unix系統(tǒng)上的信號處理機(jī)制。應(yīng)用程序開發(fā)者并不能確切知 道此類異步事件何時(shí)出現(xiàn)。因此,出現(xiàn)時(shí)機(jī)的不確定性帶來了較多的運(yùn)行 時(shí)bug。例如在類Unix系統(tǒng)中,如果程序向磁盤寫入一個(gè)大小超過系統(tǒng)限 制的文件,那么程序?qū)⑹盏揭粋€(gè)軟件中斷(信號SIGXFSZ)。如果程序不 處理該中斷,程序?qū)⒈幌到y(tǒng)終止。這是最簡單的一個(gè)運(yùn)行時(shí)bug。硬件或軟件異常主要指開發(fā)者沒有考慮到的或是開發(fā)者認(rèn)為不該出現(xiàn) 卻出現(xiàn)了的軟硬件異常,其同樣會(huì)帶來運(yùn)行時(shí)bug。例如,如果程序?qū)⑽?件寫入一個(gè)無任何可用空間的磁盤,系統(tǒng)將產(chǎn)生"磁盤無可用空間"的異 常。如果開發(fā)者沒有考慮到該異常的出現(xiàn)而繼續(xù)執(zhí)行與該文件相關(guān)的操作, 那么用戶將碰到不確定的運(yùn)行時(shí)bug。本發(fā)明中陷阱事件(TrapEvent)將為上面提到的"軟件中斷,,和"硬件 異?;蜍浖惓?事件。本發(fā)明是通過修改操作系統(tǒng)對陷阱事件處理的流程來實(shí)現(xiàn)操作系統(tǒng)為 應(yīng)用程序提供即時(shí)調(diào)試的支持,并提供操作系統(tǒng)中可定制的面向特定進(jìn)程 的即時(shí)調(diào)試能力。為了便于理解,下面首先詳細(xì)介紹內(nèi)核事件的事件分發(fā) 處理流程和陷阱事件處理流程。內(nèi)核事件在操作系統(tǒng)中是由事件分發(fā)(Event Dispatch)處理流程來處
理的。內(nèi)核事件包括陷阱事件和非陷阱事件,陷阱事件處理流程在操作系 統(tǒng)處理中屬于事件分發(fā)處理流程的一個(gè)子流程。該處理流程被用來處理陷 阱事件。圖2描述了操作系統(tǒng)內(nèi)核事件的事件分發(fā)處理流程和陷阱事件處理流 程。參考圖2,在步驟S201,應(yīng)用程序通過操作系統(tǒng)提供的特定事件機(jī)制 注冊相應(yīng)的陷阱事件處理函數(shù),該步驟是可選的,如果應(yīng)用程序沒有注冊 相應(yīng)的陷阱事件處理函數(shù),則操作系統(tǒng)和應(yīng)用程序接口提供默認(rèn)的處理函 數(shù),例如提示"發(fā)生了很嚴(yán)重的錯(cuò)誤"之類的顯示語句等。在步驟S202, 內(nèi)核事件發(fā)生,并且被操作系統(tǒng)內(nèi)核捕獲,內(nèi)核優(yōu)選可以把事件記錄到隊(duì) 列或列表中,之后將該事件傳遞到內(nèi)核;在步驟S203,判斷該內(nèi)核事件是 陷阱事件還是非陷阱事件,對于非陷阱事件,ii/v步驟S204,非陷阱事件 流程,然后ii^步驟S205,非陷阱事件將被內(nèi)核自己處理。對于陷阱事件, 在步驟S206,進(jìn)入陷阱事件流程,然后在步驟S207調(diào)用應(yīng)用程序事先注 冊的處理函數(shù)處理,如果應(yīng)用程序沒有事先注冊的處理函數(shù),則調(diào)用系統(tǒng) 默認(rèn)的處理函數(shù)。因此,在即時(shí)調(diào)試中,對于應(yīng)用程序進(jìn)程產(chǎn)生的中斷和異常,只要〈務(wù) 改操作系統(tǒng)原有的處理流程,加入進(jìn)程相關(guān)的即時(shí)調(diào)試信息標(biāo)識不同進(jìn)程 的即時(shí)調(diào)試器,在進(jìn)程出現(xiàn)陷阱事件時(shí)調(diào)用相應(yīng)進(jìn)程的即時(shí)調(diào)試器,就可 以達(dá)到不同的進(jìn)程提供不同的即時(shí)調(diào)試支持的目的。圖3示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的在操作系統(tǒng)中可基于進(jìn)程定制 調(diào)試器的即時(shí)調(diào)試的方法流程,該方法包括圖2所示的現(xiàn)有技術(shù)中對內(nèi)核 事件的事件分發(fā)處理流程和非陷阱事件處理流程,還包括修改后的陷阱事 件處理流程,該流程注冊了特別的陷阱事件處理函數(shù),如圖3,在步驟S301, 加入進(jìn)程即時(shí)調(diào)試相關(guān)信息。該步驟在該方法中可以是優(yōu)選的,因?yàn)榧磿r(shí) 調(diào)試相關(guān)信息可能在處理內(nèi)核事件時(shí)已經(jīng)通過其他方式獲得,例如其他計(jì) 算機(jī)的操作系統(tǒng)已經(jīng)將該信息通過網(wǎng)絡(luò)傳送等,后面將會(huì)詳細(xì)介紹如何加 入進(jìn)程即時(shí)調(diào)試相關(guān)信息。在步驟S308,發(fā)生陷阱事件,響應(yīng)于操作系統(tǒng) 內(nèi)核事件的陷阱事件的發(fā)生,獲得進(jìn)程即時(shí)調(diào)試相關(guān)信息,然后^步驟
S309,判別用戶是否關(guān)注陷阱事件,是否要進(jìn)行即時(shí)調(diào)試,該步驟只是為 了用戶方便,對于在操作系統(tǒng)中可基于進(jìn)程定制調(diào)試器的即時(shí)調(diào)試的方法 來說是優(yōu)選的。如果用戶關(guān)注陷阱事件,要進(jìn)行即時(shí)調(diào)試,則進(jìn)入然后調(diào) 用步驟S310,根據(jù)獲得的進(jìn)程即時(shí)調(diào)試相關(guān)信息,調(diào)用該進(jìn)程對應(yīng)的調(diào)試 器,就可以在操作系統(tǒng)中基于進(jìn)程定制即時(shí)調(diào)試器。對于用戶不關(guān)注陷阱 事件,無須進(jìn)行即時(shí)調(diào)試的情況,可以采用現(xiàn)有^L術(shù)的系統(tǒng)默認(rèn)的處理函 數(shù)。在加入進(jìn)程即時(shí)調(diào)試相關(guān)信息的步驟中,首先要確定即時(shí)調(diào)試相關(guān)信 息的內(nèi)容。進(jìn)程即時(shí)調(diào)試相關(guān)信息包括進(jìn)程調(diào)試器路徑,該屬性記錄當(dāng)前 文件系統(tǒng)中的不同進(jìn)程的調(diào)試器路徑。 一旦用戶關(guān)注的陷阱事件發(fā)生并且 需要加載調(diào)試器時(shí),^Mt系統(tǒng)可以通過該值獲悉應(yīng)該加載哪個(gè)調(diào)試器。優(yōu)選地,進(jìn)程即時(shí)調(diào)試相關(guān)信息還包括即時(shí)調(diào)試標(biāo)識位,該標(biāo)志位可 以設(shè)置為即時(shí)調(diào)試開啟或關(guān)閉,以此來描述對于進(jìn)程是否開啟了即時(shí)調(diào)試 支持。優(yōu)選地,進(jìn)程即時(shí)調(diào)試相關(guān)信息還包括即時(shí)調(diào)試事件信息,在即時(shí)調(diào)試標(biāo)志位械j殳置為開啟時(shí),該變量可以;故用來提供更廣泛的可定制性。用 戶可以將該屬性設(shè)置為不同的值以滿足不同的即時(shí)調(diào)試需求。一個(gè)應(yīng)用程序由于包含多個(gè)進(jìn)程,對于每一個(gè)進(jìn)程,可以指定不同的 即時(shí)調(diào)試器,對于一個(gè)特定的進(jìn)程,可以在不同的時(shí)間指定不同即時(shí)調(diào)試 器,但是對于一個(gè)特定的進(jìn)程,不能在同一時(shí)間指定多個(gè)即時(shí)調(diào)試器,否 則系統(tǒng)將不知道采用哪個(gè)即時(shí)調(diào)試器。添加進(jìn)程即時(shí)調(diào)試相關(guān)信息的方法有多種,下面將詳細(xì)介紹如何添加 進(jìn)程即時(shí)調(diào)試相關(guān)信息。添加進(jìn)程即時(shí)調(diào)試信息包括兩個(gè)步驟,首先要配置即時(shí)調(diào)試相關(guān)信息, 然后將即時(shí)調(diào)試相關(guān)信息告知操作系統(tǒng);并且,用戶可以通過按需更新即 時(shí)調(diào)試標(biāo)志位和即時(shí)調(diào)試事件信息,從而為目標(biāo)程序的不同執(zhí)行階段提供 不同的即時(shí)調(diào)試支持。對即時(shí)調(diào)試信息進(jìn)行配置有多種方法,例如 方法1:編譯器提供特定選項(xiàng)支持即時(shí)調(diào)試相關(guān)信息的生成并記錄在 程序的可執(zhí)行文件中,這樣,在操作系統(tǒng)加載該程序并為其創(chuàng)建進(jìn)程時(shí), 可以進(jìn)行識別并告知操作系統(tǒng)。大多數(shù)常用的可執(zhí)行文件格式,例如ELF, PE和COFF,都將不同的信息按不同的功能分類組織為不同的段或節(jié)。因 此,可以很容易地在可執(zhí)行文件中創(chuàng)建一個(gè)新的存儲(chǔ)即時(shí)調(diào)試信息的段或 節(jié)。圖4描述了這樣的配置了即時(shí)調(diào)試信息的可執(zhí)行文件格式。即時(shí)調(diào)試 信息可以由編譯器自動(dòng)生成,當(dāng)然編譯器同樣可以提供相應(yīng)的編譯選項(xiàng)供 用戶對編譯過程進(jìn)行控制。方法2:系統(tǒng)提供額外的配置工具(例如AIX上的SMIT)供用戶對 進(jìn)程的即時(shí)調(diào)試信息進(jìn)行修改。方法3:類Unix/Linux系統(tǒng)可以在proc文件系統(tǒng)中提供設(shè)置即時(shí)調(diào)試 信息的接口,用戶可隨意對其進(jìn)行修改方法4:操作系統(tǒng)系統(tǒng)提供系統(tǒng)調(diào)用來實(shí)現(xiàn)對進(jìn)程即時(shí)調(diào)試信息的修改。方法5:將即時(shí)調(diào)試信息記錄在可執(zhí)行文件以外的配置文件中。例如, 將其保存在與可執(zhí)行文件主文件名相同,但擴(kuò)展名為".INI"的文件中。如 果可執(zhí)行文件名為NOTEPAD.EXE,則可以通過在同目錄下創(chuàng)建文件 NOTEPAD.INI來對其即時(shí)調(diào)試信息進(jìn)行設(shè)置,文件內(nèi)容示例如下 [JIT DEBUGJDEBUGGER_PATH=C:\DEV\WINDBG.EXEDEBUG_FLAG=1DEBUG_MASK=OxFF上述方法都可以實(shí)現(xiàn)即時(shí)調(diào)試信息的配置,之后,需將配置的即時(shí)調(diào) 試相關(guān)信息告知操作系統(tǒng)。由于即時(shí)調(diào)試信息能夠從即時(shí)調(diào)試的角度告知 操作系統(tǒng)何時(shí)以及如何處理進(jìn)程中發(fā)生的某些事件,因此需要由操作系統(tǒng) 管理這些即時(shí)調(diào)試信息。告知操作系統(tǒng)有多種方法可以實(shí)現(xiàn),下面詳細(xì)介 紹方法l:擴(kuò)展操作系統(tǒng)中的進(jìn)程控制塊。
為了介紹該方法,首先需要介紹進(jìn)程控制塊,為了控制系統(tǒng)中的所有 進(jìn)程,操作系統(tǒng)將維護(hù)一個(gè)或多個(gè)進(jìn)程表,在進(jìn)程表中,每個(gè)進(jìn)程占據(jù)一 個(gè)表項(xiàng),每個(gè)這樣的表項(xiàng)所描述的數(shù)據(jù)區(qū)域即為對應(yīng)進(jìn)程的進(jìn)程控制塊(PCB)。圖5說明了進(jìn)程表和進(jìn)程控制塊(PCB)之間的相互關(guān)系。操作 系統(tǒng)通過PCB中記錄的諸如進(jìn)程標(biāo)識PID,進(jìn)程狀態(tài)信息等進(jìn)程信息來控 制相應(yīng)進(jìn)程。在一個(gè)進(jìn)程被創(chuàng)建之后,所有進(jìn)程控制塊中的擴(kuò)展信息并非一成不變。 部分信息對用戶而言是可修改的,用戶可以依據(jù)自身的不同需求進(jìn)行相應(yīng) 的配置。本發(fā)明中為了將將即時(shí)調(diào)試相關(guān)信息告知操作系統(tǒng),擴(kuò)展了進(jìn)程 控制塊,擴(kuò)展之后的進(jìn)程控制塊如圖6所示。圖6為添加了即時(shí)調(diào)試信息 的擴(kuò)展進(jìn)程控制塊。在操作系統(tǒng)加載應(yīng)用程序并為其創(chuàng)建進(jìn)程時(shí),可以參 照圖6將配置好的即時(shí)調(diào)試信息添加到操作系統(tǒng)中的PCB中。在圖4的方法中,內(nèi)核可以通過檢查該信息來判斷即時(shí)調(diào)試是否開啟。 如果即時(shí)調(diào)試標(biāo)志位設(shè)置為關(guān)閉,那么無須做任何額外的操作僅僅像大多 數(shù)時(shí)候那樣分發(fā)陷阱事件即可;如果開啟了即時(shí)調(diào)試,內(nèi)核將檢查用戶是 否關(guān)注當(dāng)前的陷阱事件(這可以通過檢查即時(shí)調(diào)試信息中的部分屬性來實(shí) 現(xiàn),例如即時(shí)調(diào)試事件信息)。如果用戶關(guān)心當(dāng)前的陷阱事件,那么內(nèi)核 將加載調(diào)試器路徑屬性指定的調(diào)試器,之后,將目標(biāo)進(jìn)程的控制權(quán)轉(zhuǎn)交給 調(diào)試器。上述實(shí)現(xiàn)是非常容易的,比如Linux系統(tǒng)上部分可修改的即時(shí)調(diào)試信 息可以導(dǎo)出到/proc文件系統(tǒng)中,用戶可以在任何需要修改的時(shí)候修改這部 分信息。方法2:該方法不對PCB進(jìn)行任何擴(kuò)展,而是內(nèi)核為所有進(jìn)程維護(hù)一 個(gè)"即時(shí)調(diào)試信息"列表。該列表如圖7所示。在該方法中,內(nèi)核并不對PCB 進(jìn)行擴(kuò)展,而是將一個(gè)進(jìn)程的這部分?jǐn)U;^信息作為一個(gè)節(jié)點(diǎn)組成一個(gè)列表, 并按進(jìn)程號PID進(jìn)行訪問。在操作系統(tǒng)加載應(yīng)用程序并為其創(chuàng)建進(jìn)程時(shí), 可以參照圖7將配置好的即時(shí)調(diào)試信息添加到"即時(shí)調(diào)試信息"列表中。在 該方法中,當(dāng)一個(gè)進(jìn)程需要進(jìn)行即時(shí)調(diào)試時(shí),內(nèi)核依據(jù)該進(jìn)程的PID在上
述列表中進(jìn)行查詢以獲取對應(yīng)該進(jìn)程的即時(shí)調(diào)試信息。方法3:將即時(shí)調(diào)試信息記錄在對應(yīng)進(jìn)程的進(jìn)程空間的固定位置處 JIT_INFO_FIXED—ADDRESS—OFFSET,例如0x01000000H。這個(gè)地址 信息對所有進(jìn)程而言都是固定了 。在操作系統(tǒng)加載應(yīng)用程序并為其創(chuàng)建進(jìn) 程時(shí),將配置好的即時(shí)調(diào)試信息添加到該固定位置處。當(dāng)內(nèi)核需要訪問一 個(gè)進(jìn)程的即時(shí)調(diào)試信息時(shí),直接訪問(進(jìn)程空間的起始地址 +JIT_INFO_FIXED_ADDRESS_OFFSET)地址開始的信息,圖8示出 了進(jìn)程在內(nèi)存中的空間。圖9示出了修^的進(jìn)程在內(nèi)存中的空間。這樣,操作系統(tǒng)就可以獲得即時(shí)調(diào)試相關(guān)信息,就可以用來實(shí)現(xiàn)操作 系統(tǒng)對可定制的面向特定進(jìn)程的即時(shí)調(diào)試支持,下面以編譯器提供特定選統(tǒng)中的進(jìn)程數(shù)據(jù)塊的方式為例,介紹操作系統(tǒng)內(nèi)的運(yùn)轉(zhuǎn)流程1. 采用即時(shí)調(diào)試信息選項(xiàng)編譯程序,例如cc 一fjit-on —fjit—debugger=/usr/bin/dbx —fjit-mask=0x0h —o hello hello.c 在編譯過程中,編譯器將依據(jù)即時(shí)調(diào)試選項(xiàng)的值在最后生成的可執(zhí)行程序 中創(chuàng)建一個(gè)額外的即時(shí)調(diào)試段,并在該段中攜帶相應(yīng)的即時(shí)調(diào)試信息。2. 操作系統(tǒng)在加載可執(zhí)行程序的同時(shí)識別出步驟1中生成的即時(shí)調(diào)試 信息。3. 使用步驟2中識別出來的即時(shí)調(diào)試信息填充進(jìn)程控制塊PCB中的 擴(kuò)展屬性。進(jìn)程控制塊PCB中的部分屬性值可以進(jìn)行重配置,并借此提供較大的 可定制性。4. 當(dāng)一個(gè)陷阱事件發(fā)生時(shí),操作系統(tǒng)內(nèi)核將檢測擴(kuò)展信息中的即時(shí) 調(diào)試標(biāo)志位來決定是否支持即時(shí)調(diào)試。如果不支持就如往常那樣分發(fā)該陷 阱事件即可;如果支持即時(shí)調(diào)試并且用戶關(guān)注該陷阱事件,那么啟動(dòng)擴(kuò)展 信息中即時(shí)調(diào)試器路徑指定的調(diào)試器并將目標(biāo)進(jìn)程的控制權(quán)轉(zhuǎn)交給該調(diào)試 器。5. 開始調(diào)試過程。
在同一個(gè)發(fā)明構(gòu)思下,本發(fā)明還提供了一種在操作系統(tǒng)內(nèi)可基于進(jìn)程定制調(diào)試器的即時(shí)調(diào)試的系統(tǒng)1000,如圖10所示,該系統(tǒng)包括獲取器1001,用于響應(yīng)于操作系統(tǒng)內(nèi)核事件的陷阱事件的發(fā)生,獲得進(jìn)程即時(shí)調(diào)試相關(guān)信息;調(diào)用器i002,用于根據(jù)獲得的進(jìn)程即時(shí)調(diào)試相關(guān)信息,調(diào)用該進(jìn)程 對應(yīng)的調(diào)試器;通知器1003,用于將即時(shí)調(diào)試相關(guān)信息告知操作系統(tǒng);配 置器1004,用于配置即時(shí)調(diào)試相關(guān)信息和添加器1005。這里,該系統(tǒng)和本發(fā)明的方法是對應(yīng)的,其中,進(jìn)程即時(shí)調(diào)試相關(guān)信 息包括進(jìn)程調(diào)試器路徑。優(yōu)選地,進(jìn)程即時(shí)調(diào)試相關(guān)信息還包括即時(shí)調(diào)試 標(biāo)識位,該標(biāo)志位可以設(shè)置為即時(shí)調(diào)試開啟或關(guān)閉,以此來描述對于進(jìn)程 是否開啟了即時(shí)調(diào)試支持。優(yōu)選地,進(jìn)程即時(shí)調(diào)試相關(guān)信息還包括即時(shí)調(diào) 試事件信息,在即時(shí)調(diào)試標(biāo)志位被設(shè)置為開啟時(shí),該變量可以被用來提供 更廣泛的可定制性。用戶可以將該屬性設(shè)置為不同的值以滿足不同的即時(shí) 調(diào)試需求。該系統(tǒng)中,通知器1003可以采用以下方法之一實(shí)現(xiàn)a. 擴(kuò)展操作系統(tǒng)中的進(jìn)程控制塊,加入即時(shí)調(diào)試相關(guān)信息;b. 操作系統(tǒng)內(nèi)核為所有進(jìn)程維護(hù)一個(gè)即時(shí)調(diào)試信息列表;c. 將即時(shí)調(diào)試信息記錄在對應(yīng)進(jìn)程的進(jìn)程空間的固定位置處。以上通 知器1003的具體擴(kuò)展和實(shí)現(xiàn)方法和本發(fā)明的方法描述是一致的,這里不再 贅述。該系統(tǒng)中,配置器1004可以采用以下方法之一實(shí)現(xiàn)a. 編譯器提供特定選項(xiàng)支持即時(shí)調(diào)試相關(guān)信息的生成并記錄在程序 的可執(zhí)行文件中;b. 操作系統(tǒng)提供額外的配置工具來對進(jìn)程的即時(shí)調(diào)試信息進(jìn)行修改;c. 類Unix/Liimx系統(tǒng)在proc文件系統(tǒng)中提供設(shè)置即時(shí)調(diào)試信息的接d. 操作系統(tǒng)系統(tǒng)提供系統(tǒng)調(diào)用來實(shí)現(xiàn)對進(jìn)程即時(shí)調(diào)試信息的修改;e. 將即時(shí)調(diào)試信息記錄在可執(zhí)行文件以外的配置文件中。 以上配置器1004的具體實(shí)現(xiàn)方法和本發(fā)明的方法描述是一致的,這
里不再贅述。該系統(tǒng)中,添加器1005,用于在^Mt系統(tǒng)加栽應(yīng)用程序并為其創(chuàng)建進(jìn) 程時(shí),將配置好的即時(shí)調(diào)試信息添加到下述之一a. 擴(kuò)展操作系統(tǒng)中的進(jìn)程控制塊;b. 操作系統(tǒng)內(nèi)核為所有進(jìn)程維護(hù)的即時(shí)調(diào)試信息列表;c. 對應(yīng)進(jìn)程的進(jìn)程空間的固定位置處。對于這樣的在操作系統(tǒng)內(nèi)可基于進(jìn)程定制調(diào)試器的即時(shí)調(diào)試的系統(tǒng), 在操作系統(tǒng)中工作的流程為1.采用配置器1004配置即時(shí)調(diào)試信息; 2.利用添加器1005識別出即時(shí)調(diào)試信息,傳給通知器1003,這樣,操 作系統(tǒng)就可以獲知即時(shí)調(diào)試相關(guān)信息;3. 當(dāng)一個(gè)陷阱事件發(fā)生并需要即時(shí)調(diào)試時(shí),操作系統(tǒng)利用獲取器 1001獲得即時(shí)調(diào)試相關(guān)信息,然后利用調(diào)用器1002才艮據(jù)即時(shí)調(diào)試相關(guān)信 息來調(diào)用進(jìn)程相關(guān)的調(diào)試器;4. 開始調(diào)試過程。本發(fā)明還提供一種程序產(chǎn)品,包含實(shí)現(xiàn)以上所有方法的程序代碼以及 承載該程序代碼的承載介質(zhì)。雖然這里參照附圖描述了本發(fā)明的示例性實(shí)施例,但是應(yīng)該理解本發(fā) 明不限于這些精確的實(shí)施例,并且再不背離本發(fā)明的范圍和宗旨的情況下, 本領(lǐng)域普通技術(shù)人員能對實(shí)施例進(jìn)行各種變化的修改。所有這些變化和修 改意欲包含在所附權(quán)利要求中限定的本發(fā)明的范圍中。
權(quán)利要求
1. 一種在操作系統(tǒng)內(nèi)可基于進(jìn)程定制調(diào)試器的即時(shí)調(diào)試的方法,包括響應(yīng)于操作系統(tǒng)內(nèi)核事件的一陷阱事件的發(fā)生,獲得進(jìn)程即時(shí)調(diào)試相關(guān)信息;根據(jù)獲得的進(jìn)程即時(shí)調(diào)試相關(guān)信息,調(diào)用該進(jìn)程對應(yīng)的調(diào)試器。
2. 根據(jù)權(quán)利要求l所述的方法,其中所述陷阱事件為軟件中斷、硬件異常事件或軟件異常事件。
3. 根據(jù)權(quán)利要求1或2所述的方法,其中進(jìn)程即時(shí)調(diào)試相關(guān)信息包 括進(jìn)程調(diào)試器路徑。
4. 根據(jù)權(quán)利要求1、 2或3所述的方法,還包括步驟將即時(shí)調(diào)試相 關(guān)信息告知操作系統(tǒng)。
5. 根據(jù)權(quán)利要求4所述的方法,其中將即時(shí)調(diào)試相關(guān)信息告知操作 系統(tǒng)可以采用以下方法之一 實(shí)現(xiàn)a. 擴(kuò)展操作系統(tǒng)中的進(jìn)程數(shù)據(jù)塊,加入即時(shí)調(diào)試相關(guān)信息;b. 操作系統(tǒng)內(nèi)核為所有進(jìn)程維護(hù)一個(gè)即時(shí)調(diào)試信息列表;c. 將即時(shí)調(diào)試信息記錄在對應(yīng)進(jìn)程的進(jìn)程空間的固定位置處。
6. 根據(jù)權(quán)利要求5所述的方法,還包括步驟配置即時(shí)調(diào)試相關(guān)信息。
7. 根據(jù)權(quán)利要求6所述的方法,其中配置即時(shí)調(diào)試相關(guān)信息可以采 用以下方法之一實(shí)現(xiàn)a. 編譯器提供特定選項(xiàng)支持即時(shí)調(diào)試相關(guān)信息的生成并記錄在程序 的可執(zhí)行文件中;b. 操作系統(tǒng)提供額外的配置工具來對進(jìn)程的即時(shí)調(diào)試信息進(jìn)行修改;c. 類Unix/Linux系統(tǒng)在proc文件系統(tǒng)中提供設(shè)置即時(shí)調(diào)試信息的接cr;d. 操作系統(tǒng)系統(tǒng)提供系統(tǒng)調(diào)用來實(shí)現(xiàn)對進(jìn)程即時(shí)調(diào)試信息的修改;e. 將即時(shí)調(diào)試信息記錄在可執(zhí)行文件以外的配置文件中。
8. 根據(jù)權(quán)利要求7所述的方法,其中還包括在操作系統(tǒng)加栽應(yīng)用程 序并為其創(chuàng)建進(jìn)程時(shí),將配置好的即時(shí)調(diào)試信息加載到下述之一a. 擴(kuò)展操作系統(tǒng)中的進(jìn)程數(shù)據(jù)塊;b. 操作系統(tǒng)內(nèi)核為所有進(jìn)程維護(hù)的即時(shí)調(diào)試信息列表;c. 對應(yīng)進(jìn)程的進(jìn)程空間的固定位置處。
9. 一種在操作系統(tǒng)內(nèi)可基于進(jìn)程定制調(diào)試器的即時(shí)調(diào)試的系統(tǒng),包括獲取器,用于響應(yīng)于操作系統(tǒng)內(nèi)核事件的一陷阱事件的發(fā)生,獲得進(jìn) 程即時(shí)調(diào)試相關(guān)信息;調(diào)用器,用于根據(jù)獲得的進(jìn)程即時(shí)調(diào)試相關(guān)信息,調(diào)用該進(jìn)程對應(yīng)的 調(diào)試器。
10. 根據(jù)權(quán)利要求9所述的系統(tǒng),其中所述陷阱事件為軟件中斷、硬 件異常事件或軟件異常事件。
11. 根據(jù)權(quán)利要求9或10所述的系統(tǒng),其中進(jìn)程即時(shí)調(diào)試相關(guān)信息 包括進(jìn)程調(diào)試器路徑。
12. 根據(jù)權(quán)利要求9、 10或11所述的系統(tǒng),還包括通知器,用于將 即時(shí)調(diào)試相關(guān)信息告知操作系統(tǒng)。
13. 根據(jù)權(quán)利要求12所述的系統(tǒng),其中通知器可以采用以下方法之 一實(shí)現(xiàn):a. 擴(kuò)展操作系統(tǒng)中的進(jìn)程數(shù)據(jù)塊,加入即時(shí)調(diào)試相關(guān)信息;b. 操作系統(tǒng)內(nèi)核為所有進(jìn)程維護(hù)一個(gè)即時(shí)調(diào)試信息列表;c. 將即時(shí)調(diào)試信息記錄在對應(yīng)進(jìn)程的進(jìn)程空間的固定位置處。
14. 根據(jù)權(quán)利要求13所述的系統(tǒng),還包括配置器,用于配置即時(shí)調(diào) 試相關(guān)信息。
15. 根據(jù)權(quán)利要求13所述的系統(tǒng),其中配置器可以采用以下方法之 一實(shí)現(xiàn)a.編譯器提供特定選項(xiàng)支持即時(shí)調(diào)試相關(guān)信息的生成并記錄在程序 的可執(zhí)行文件中;b. 操作系統(tǒng)提供額外的配置工具來對進(jìn)程的即時(shí)調(diào)試信息進(jìn)行修改;c. 類Unix/Linux系統(tǒng)在proc文件系統(tǒng)中提供i殳置即時(shí)調(diào)試信息的接口 ;d. 操作系統(tǒng)系統(tǒng)提供系統(tǒng)調(diào)用來實(shí)現(xiàn)對進(jìn)程即時(shí)調(diào)試信息的修改;e. 將即時(shí)調(diào)試信息記錄在可執(zhí)行文件以外的配置文件中。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其中還包括添加器,用于在操作 系統(tǒng)加載應(yīng)用程序并為其創(chuàng)建進(jìn)程時(shí),將配置好的即時(shí)調(diào)試信息加載到下 述之一a. 擴(kuò)展操作系統(tǒng)中的進(jìn)程數(shù)據(jù)塊;b. 操作系統(tǒng)內(nèi)核為所有進(jìn)程維護(hù)的即時(shí)調(diào)試信息列表;c. 對應(yīng)進(jìn)程的進(jìn)程空間的固定位置處。
全文摘要
本發(fā)明提出了一種在操作系統(tǒng)內(nèi)可基于進(jìn)程定制調(diào)試器的即時(shí)調(diào)試的方法和系統(tǒng),包括響應(yīng)于操作系統(tǒng)內(nèi)核事件的一陷阱事件的發(fā)生,獲得進(jìn)程即時(shí)調(diào)試相關(guān)信息;根據(jù)獲得的進(jìn)程即時(shí)調(diào)試相關(guān)信息,調(diào)用該進(jìn)程對應(yīng)的調(diào)試器。該方法能夠面向特定進(jìn)程,為不同的進(jìn)程提供不同的即時(shí)調(diào)試支持。
文檔編號G06F11/36GK101398780SQ200710161980
公開日2009年4月1日 申請日期2007年9月27日 優(yōu)先權(quán)日2007年9月27日
發(fā)明者于維英, 研 李, 勇 鄭, 堯 齊 申請人:國際商業(yè)機(jī)器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
宾阳县| 临沧市| 海城市| 嘉峪关市| 沾化县| 清新县| 忻城县| 沽源县| 黎平县| 防城港市| 武邑县| 呈贡县| 利辛县| 阳新县| 墨脱县| 康保县| 沅江市| 织金县| 章丘市| 宜都市| 汨罗市| 武鸣县| 彰武县| 阳城县| 榆中县| 寿宁县| 兰坪| 商水县| 昌邑市| 九江市| 凤阳县| 泾川县| 西峡县| 江孜县| 阿巴嘎旗| 枞阳县| 临洮县| 海林市| 长阳| 阳新县| 徐汇区|