代碼編譯結果的檢測方法和裝置的制造方法
【專利摘要】本發明公開了一種代碼編譯結果的檢測方法和裝置。其中,該方法包括:從對源代碼進行編譯所生成的編譯信息文件中獲取基本塊的信息,其中,每個基本塊的信息包括:源代碼中的一段代碼中被記錄為已編譯的代碼行的行號;從源代碼中獲取有效代碼行的行號;檢測有效代碼行的行號中是否存在漏記錄的行號,其中,漏記錄的行號為未記錄在基本塊的信息中、且位于基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內的行號;以及在檢測到有效代碼行的行號中存在漏記錄的行號時,將漏記錄的行號記錄為已編譯的代碼行的行號。本發明解決了相關技術在代碼編譯過程中針對代碼行執行情況的統計結果不準確的技術問題。
【專利說明】
代碼編譯結果的檢測方法和裝置
技術領域
[0001]本發明涉及計算機領域,具體而言,涉及一種代碼編譯結果的檢測方法和裝置。
【背景技術】
[0002]目前,為了保證軟件應用的穩定性,通常需要對軟件代碼進行測試,其中,測試代碼覆蓋率為軟件代碼測試過程中的一個重要測試環節,測試代碼覆蓋率即為在代碼編譯過程中對代碼行的執行情況進行統計,比如統計代碼行的執行次數。現有技術通常采用插粧法對代碼行的執行情況進行統計,插粧法具體可以描述為:代碼編譯過程中在源代碼中加入計數代碼段,即對源代碼進行插粧操作;客戶端獲取并執行插粧后的軟件應用;在軟件應用退出后將插粧計數的數據轉存到磁盤中;通過分析磁盤中存儲的文件推導出各個代碼行的執行次數。采用插粧法統計代碼編譯過程中代碼行的執行情況存在以下兩個問題:
[0003]1、由于插粧計數信息需要在內存中運行后才能產生,那么對于動態加載的模塊,如果沒有執行到則不會加載,也就不會生產相應的計數文件,導致在統計代碼行執行情況時將會缺失對該部分文件的統計。
[0004]2、在代碼編寫過程中,為了便于讀取,往往會將長的代碼行拆分成多行編寫,如圖1所示的代碼段中的第44行和第45行(圖1中所示方框內的代碼)。對于這種情況,采用插粧法統計代碼行的執行情況時被換行的有效代碼行的數據信息將會被忽略掉,即只統計了第44行的執行次數32768,第45行的執行次數被忽略掉了,這將導致代碼行執行情況的統計結果出現誤差,尤其是在統計差異化代碼行執行情況時這部分差異化代碼行將會被遺漏,導致最終代碼行執行情況的統計結果不準確。
[0005]針對上述的問題,目前尚未提出有效的解決方案。
【發明內容】
[0006]本發明實施例提供了一種代碼編譯結果的檢測方法和裝置,以至少解決相關技術在代碼編譯過程中針對代碼行執行情況的統計結果不準確的技術問題。
[0007]根據本發明實施例的一個方面,提供了一種代碼編譯結果的檢測方法,包括:從對源代碼進行編譯所生成的編譯信息文件中獲取基本塊的信息,其中,每個基本塊的信息包括:源代碼中的一段代碼中被記錄為已編譯的代碼行的行號;從源代碼中獲取有效代碼行的行號;檢測有效代碼行的行號中是否存在漏記錄的行號,其中,漏記錄的行號為未記錄在基本塊的信息中、且位于基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內的行號;以及在檢測到有效代碼行的行號中存在漏記錄的行號時,將漏記錄的行號記錄為已編譯的代碼行的行號。
[0008]根據本發明實施例的另一方面,還提供了一種代碼編譯結果的檢測裝置,包括:第一獲取模塊,用于從對源代碼進行編譯所生成的編譯信息文件中獲取基本塊的信息,其中,每個基本塊的信息包括:源代碼中的一段代碼中被記錄為已編譯的代碼行的行號;第二獲取模塊,用于從源代碼中獲取有效代碼行的行號;檢測模塊,用于檢測有效代碼行的行號中是否存在漏記錄的行號,其中,漏記錄的行號為未記錄在基本塊的信息中、且位于基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內的行號;以及記錄模塊,用于在檢測到有效代碼行的行號中存在漏記錄的行號時,將漏記錄的行號記錄為已編譯的代碼行的行號。
[0009]在本發明實施例中,通過從源代碼編譯產生的編譯信息文件中獲取基本塊的信息,依據基本塊的信息檢測源代碼中的有效代碼行的行號中是否存在未記錄在基本塊的信息中且位于基本塊的信息中記錄的最小行號和最大行號之間的行號,若存在則將未記錄在基本塊的信息中的行號記錄為已編譯的代碼行的行號,達到了準確統計代碼編譯過程中有效代碼行執行情況的目的,從而實現了提高代碼編譯過程中代碼行執行情況統計結果的準確度的技術效果,進而解決了相關技術在代碼編譯過程中針對代碼行執行情況的統計結果不準確的技術問題。
【附圖說明】
[0010]此處所說明的附圖用來提供對本發明的進一步理解,構成本申請的一部分,本發明的示意性實施例及其說明用于解釋本發明,并不構成對本發明的不當限定。在附圖中:[0011 ]圖1是根據現有技術的代碼行執行次數統計結果的示意圖;
[0012]圖2是根據本發明實施例的代碼編譯結果的檢測方法的硬件環境的示意圖;
[0013]圖3是根據本發明實施例的一種可選的代碼編譯結果的檢測方法的流程圖;
[0014]圖4是根據本發明實施例的編譯信息文件的示意圖;
[0015]圖5是根據本發明實施例的有效代碼行的示意圖;
[0016]圖6是根據本發明實施例的代碼行執行次數統計結果的示意圖;
[0017]圖7是根據本發明實施例的執行信息文件的示意圖;
[0018]圖8是根據本發明實施例的補錄后的執行信息文件的示意圖;
[0019]圖9是根據本發明實施例的代碼編譯結果的檢測裝置的示意圖;
[0020]圖10是根據本發明實施例的一種可選的代碼編譯結果的檢測裝置的示意圖;
[0021]圖11是根據本發明實施例的另一種可選的代碼編譯結果的檢測裝置的示意圖;
[0022]圖12是根據本發明實施例的再一種可選的代碼編譯結果的檢測裝置的示意圖;
[0023]圖13是根據本發明實施例的又一種可選的代碼編譯結果的檢測裝置的示意圖;以及
[0024]圖14是根據本發明實施例的一種終端的結構框圖。
【具體實施方式】
[0025]為了使本技術領域的人員更好地理解本發明方案,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分的實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都應當屬于本發明保護的范圍。
[0026]需要說明的是,本發明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數據在適當情況下可以互換,以便這里描述的本發明的實施例能夠以除了在這里圖示或描述的那些以外的順序實施。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統、產品或設備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對于這些過程、方法、產品或設備固有的其它步驟或單元。
[0027]首先,在對本發明實施例進行描述的過程中出現的部分名詞或者術語適用于如下解釋:
[0028]Clang,是一個 C 語言、C++、0b jective_C、0b jective-C++語言的輕量級編譯器。
[0029]Gcov,是一個測試代碼覆蓋率的工具,即測試代碼編譯過程中代碼行執行情況的工具。
[0030]Gcno,Gco V執行時生成的文件。
[0031]實施例1
[0032]根據本發明實施例,提供了一種代碼編譯結果的檢測方法的方法實施例。
[0033]可選地,在本實施例中,上述代碼編譯結果的檢測方法可以應用于如圖2所示的由服務器102和終端104所構成的硬件環境中。如圖2所示,服務器102通過網絡與終端104進行連接,上述網絡包括但不限于:廣域網、城域網或局域網,終端104并不限定于PC、手機、平板電腦等。本發明實施例的數據處理方法可以由服務器102來執行,也可以由終端104來執行,還可以是由服務器102和終端104共同執行。其中,終端104執行本發明實施例的數據處理方法也可以是由安裝在其上的客戶端來執行。
[0034]圖3是根據本發明實施例的一種可選的代碼編譯結果的檢測方法的流程圖,如圖3所示,該方法可以包括以下步驟:
[0035]步驟S202,從對源代碼進行編譯所生成的編譯信息文件中獲取基本塊的信息,其中,每個基本塊的信息包括:源代碼中的一段代碼中被記錄為已編譯的代碼行的行號;
[0036]步驟S204,從源代碼中獲取有效代碼行的行號;
[0037]步驟S206,檢測有效代碼行的行號中是否存在漏記錄的行號,其中,漏記錄的行號為未記錄在基本塊的信息中、且位于基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內的行號;
[0038]步驟S208,在檢測到有效代碼行的行號中存在漏記錄的行號時,將漏記錄的行號記錄為已編譯的代碼行的行號。
[0039]通過上述步驟S202至步驟S208,通過從源代碼編譯產生的編譯信息文件中獲取基本塊的信息,依據基本塊的信息檢測源代碼中的有效代碼行的行號中是否存在未記錄在基本塊的信息中且位于基本塊的信息中記錄的最小行號和最大行號之間的行號,若存在則將未記錄在基本塊的信息中的行號記錄為已編譯的代碼行的行號,解決了相關技術在代碼編譯過程中針對代碼行執行情況的統計結果不準確的技術問題,從而實現了提高代碼編譯過程中代碼行執行情況統計結果的準確度的技術效果。
[0040]在步驟S202提供的技術方案中,源代碼進行編譯之后得到的文件為二進制文件,對該二進制文件進行反匯編操作可以得到編譯信息文件,如圖4所示,編譯信息文件可以由反匯編代碼組成,根據這些反匯編代碼可以拆分成至少一個基本塊,每個基本塊對應源代碼中的一段代碼,一個代碼段可以包括至少一個代碼行。本發明實施例定義的基本塊可以具備以下特性:基本塊對應的代碼段中的第一條代碼行語句被執行,則整個代碼段語句都會被執行一次;基本塊為源代碼中一個順序執行的語句序列;一個基本塊只有一個出口語句和一個入口語句,執行時只能從入口語句進入,從出口語句退出;基本塊中所有代碼行語句的執行次數均相同;一個基本塊一般有多個順序執行語句后跟一個跳轉語句組成。
[0041 ]可選地,編譯信息文件中可以包括至少一個基本塊,每兩個基本塊之間可以用標識符隔開,如圖4所不方框部分,標識符為01450000,該標識符所在的字節為該基本塊的起始位置,該標識符所在字節至下一個標識符之間的字節組成一個基本塊,該基本塊的信息可以由這些字節表示。例如圖4中的第一基本塊與第二基本塊的標識符為01450000,從第一基本塊的起始位置也即標識符01450000開始至第二基本塊的起始位置也即標識符01450000之間的所有字節均屬于第一基本塊,從這些字節中可以獲取到第一基本塊的信息,具體地:標識符01450000之后的字節用于表示第一基本塊的長度,即從該字節至第二基本塊標識符01450000之間的字節數量,如圖4所示,第一基本塊的長度為0000000B,即第一基本塊的長度為11,也即從該字節之后還包括11個字節。在表示第一基本塊長度的字節之后的字節00000001表示第一基本塊的標識,即代表該基本塊的標識號為I,該字節主要用于標識不同的基本塊。在表示不同的基本塊的字節之后的字節00000000用于表示后面記錄的為該基本塊對應的代碼段編譯之后生成的二進制文件的文件名。之后的字節00000003用于表示文件名長度,即用后續的三個字節表示該文件名,即0000632E74736574,文件名為“test.c”,需要說明的是,65742F2E中的2F2E以及00000000中的0000為固定格式,參見第二基本塊中相應字節表示文件名的方式。表示文件名之后的字節用于表示該第一基本塊對應的代碼端中的已編譯的代碼行的行號,分別為0000002B、0000002C、0000002F,即分別為第43、44、47行。之后的兩個字節00000000、00000000用于表示該第一基本塊的終止位置。同樣地,第二基本塊也可以按照上述分析方法得到第二基本塊的信息。
[0042]需要說明的是,由上述分析可以獲取到基本塊的信息,可以包括但并不限于源代碼中的一段代碼中被記錄為已編譯的代碼行的行號,比如圖4中第一基本塊的信息中記錄的43、44、47。基本塊的信息還可以包括上述分析得到的基本塊的標識符、基本塊的標識、基本塊的長度、基本塊對應的代碼段編譯之后生成的二進制文件的文件名等。需要說明的是,從基本塊的信息中記錄的已編譯的代碼行的行號可以得到最小行號和最大行號,比如最小行號為43,最大行號為47,依據最小行號和最大行號可以得到該基本塊包含的代碼行的區間范圍為43-47,即第43行至第47行對應同一基礎塊。在該區間范圍43-47內,基本塊的信息中只記錄了 44為已編譯的代碼行的行號,對于行號為45、46的代碼行可能是無效代碼行,也可能是沒有統計到。
[0043]本發明實施例中的編譯信息文件可以是在mac機的osx系統上的Gcno文件,其中,Gcno文件為測試代碼覆蓋率的工具Gcov在執行時生成的文件,該Gcno文件中存儲有代碼段對應的基礎塊的信息,以及代碼段與基礎塊的對應關系等。還需要說明的是,本發明實施例的編譯信息文件還可以是108、1;[111?、&11(11'01(1系統下的代碼編譯過程中產生的文件。
[0044]在步驟S204提供的技術方案中,osx系統中源代碼文件一般為以.c或.cpp或.m為后綴的文件,本發明實施例可以使用Clang解析該源代碼文件,具體可以使用命令行“01&1^-(^1-(11111^)-1:01^118文件名”,例如Clang-ccl-dump-tokens abc.m,如圖5所不,方框部分為使用Clang對代碼段進行解析得到的圖1所示代碼段中第44行和第45行的有效代碼行。需要說明的是,本發明實施例使用Clang對源代碼進行解析時可以將源代碼中的空白行、注釋行等無效行進行過濾,也可以將與實際執行無關的一些符號比如“{}”進行過濾,以便于使用Clang解析后得到的有效代碼行更加準確。
[0045]在對源代碼進行解析得到有效代碼行之后,本發明實施例可以獲取有效代碼行的行號。在源代碼中每行代碼均對應一個行號,該行號用于標識該代碼行在源代碼文件中位置,代碼行的行號如圖1所示。需要說明的是,在源代碼文件中每行均對應一個行號,與行號對應的行可以為有效代碼行,比如第44行和第45行,也可以為空白行,比如第43行和第46行,還可以是符號,比如第47行。在源代碼文件中可以記錄有不同行號與代碼行的對應關系,比如行號45對應代碼行“NSLog(@“aabbCCdd: %礦,”,在通過解析得到源代碼中的有效代碼行之后,可以依據源代碼文件中存儲的行號與代碼行的對應關系得到有效代碼行對應的行號,比如當對源代碼解析獲取到有效代碼行“NSL0g(@“aabbCCdd:%@”,”以及“O“bbcccdd” );”時,依據源代碼文件中存儲的行號與代碼行的對應關系可以獲取有效代碼行“NSLog(@“aabbccdd: 的行號為44,有效代碼行 “O “bbcccdd” );,,的行號為45。
[0046]在步驟S206提供的技術方案中,漏記錄的行號可以為未記錄在基本塊的信息中、且位于基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內的行號。比如,從基本塊的信息中可以獲取到被記錄的最小行號為43,最大行號為47,記錄在基本塊的信息中的已執行編譯的代碼行為44,則漏記錄的行號為45、46,源代碼中的第43-47行對應同一個基本塊。從源代碼中獲取到的有效代碼行可以是一個,也可以是多個,相應地,有效代碼行的行號也可以是一個或者多個。比如,從源代碼中獲取到的有效代碼行的行號為44和45,則檢測有效代碼行的行號中是否存在漏記錄的行號得到的結果為:存在,漏記錄的行號為45。本發明實施例通過檢測有效代碼行的行號中是否存在漏記錄的行號,目的是為了檢測在源代碼編譯過程中統計代碼行的執行情況時是否存在遺漏代碼行未統計,以達到保證源代碼中有效代碼行的執行情況的統計結果的準確性的效果。
[0047]在步驟S208提供的技術方案中,由于對應同一個基本塊的代碼行的執行次數相同,即當記錄在基本塊信息中已編譯的代碼行與漏記錄行號對應的代碼行的執行次數應該相同,也即在代碼編譯過程中記錄在基本塊信息中已編譯的代碼行被執行一次,則漏記錄行號對應的代碼行也執行一次。為了保證源代碼中有效代碼行的執行情況的統計結果的準確性,本發明實施例在檢測到有效代碼行的行號中存在漏記錄的行號時,可以將漏記錄的行號記錄為已編譯的代碼行的行號,以達到保證當記錄在基本塊信息中已編譯的代碼行與漏記錄行號對應的代碼行的執行次數相同的目的。
[0048]比如,有效代碼行的行號為44和45,基本塊的信息中被記錄的最小行號為43,最大行號為47,記錄在基本塊的信息中的已編譯的代碼行為44,漏記錄的行號為45、46,則可以得到有效代碼行的行號中存在漏記錄的行號為45。原則上第44行和第45行的代碼的執行次數應該相同,但是由于某種原因導致在統計代碼行的執行次數時未統計第45行代碼的執行次數。因此,為了保證源代碼中代碼行執行次數統計結果的準確性,需要將行號45記錄為已編譯的代碼行的行號,且第45行代碼的執行次數與第44行代碼的執行次數相同,如圖6所示,其中,圖6所示的代碼行執行次數統計結果為對圖1所示的代碼行執行次數統計結果進行修正后的結果,在圖6所示方框中的第44行和第45行代碼的執行次數相同,均為32768。
[0049]作為一種可選的實施例,步驟S208將漏記錄的行號記錄為已編譯的代碼行的行號可以包括:步驟S2082,將漏記錄的行號作為已編譯的代碼行的行號補入到源代碼被執行所生成的執行信息文件中,其中,執行信息文件至少包括:被記錄為已編譯的代碼行的行號,被記錄為已編譯的代碼行被執行的次數。
[0050]需要說明的是,執行信息文件為對源代碼執行編譯后得到的文件,如圖7所示,執行信息文件中可以被記錄為已編譯的代碼行的行號以及被記錄為已編譯的代碼行被執行的次數,比如圖7所示方框中的行號44,第44行代碼的執行次數32768。在源代碼執行編譯后得到的執行信息文件中只包括有被記錄為已編譯的代碼行的行號和執行次數,對于漏記錄的行號和該行號對應的代碼行的執行次數并未在執行信息文件中記錄,因此,為了保證執行信息文件中記錄的關于代碼行的執行情況信息的準確性,該實施例可以將漏記錄的行號作為已編譯的代碼行的行號補入到源代碼被執行所生成的執行信息文件中,補錄后的執行信息文件如圖8所示,在圖8所示方框中將漏記錄的行號45以及該第45行代碼的執行次數32768(與第44行代碼的執行次數相同)補錄入執行信息文件中。
[0051]該實施例通過將將漏記錄的行號作為已編譯的代碼行的行號補入到源代碼被執行所生成的執行信息文件中,提高了執行信息文件中反映的代碼行執行情況的準確性。同時,在執行信息文件中對代碼執行情況進行修改和保存,還能夠達到便于從執行信息文件中直接讀取代碼行執行情況的效果。
[0052]作為一種可選的實施例,步驟S2082將漏記錄的行號作為已編譯的代碼行的行號補入到源代碼被執行所生成的執行信息文件中可以包括:步驟S20822,按照行號的順序將漏記錄的行號補入到執行信息文件中對應的位置上,并在位置上記錄漏記錄的行號對應的代碼行被執行的次數,其中,漏記錄的行號對應的代碼行被執行的次數等于漏記錄的行號所在的行號區間中已編譯的代碼行的行號對應的代碼行被執行的次數。
[0053]需要說明的是,在將漏記錄的行號補如至執行信息文件中時,該實施例優選地按照行號順序進行補錄,可以是按照行號由小到大的順序,也可以是按照行號由大到小的順序。按照行號順序補錄漏記錄的行號,能夠便于從執行信息文件中快速定位行號所在位置,按照行號順序尤其是在代碼行行數特別多個情況下優點更為突出。比如,在圖8所示方框中將行號45補入執行信息文件中行號44的后面。
[0054]可選地,在將漏記錄的行號補入執行信息文件中時,該實施例還可以將漏記錄的行號對應的代碼行的執行次數補入在該行號的對應位置上,如圖8所示方框中行號45后的執行次數32768。此處需要說明的是,漏記錄的行號對應的代碼行被執行的次數等于漏記錄的行號所在的行號區間中已編譯的代碼行的行號對應的代碼行被執行的次數。比如行號45對應的代碼行的執行次數與對應同一個基礎塊中記錄的已編譯的代碼行的行號44對應的代碼行的執行次數相同,均為32768,如圖8所示。該實施例通過將漏記錄的行號以及該行號對應的代碼行的執行次數一并補入執行信息文件中,能夠達到便于直接從執行信息文件中得到每個代碼行執行情況的效果。
[0055]作為一種可選的實施例,步驟S204從源代碼中獲取有效代碼行的行號可以包括以下步驟:
[0056]步驟S2042,從源代碼中過濾掉注釋行、空白行和與源代碼執行不相關的符號信息,得到第一代碼。
[0057]步驟S2044,將第一代碼中的代碼行的行號記錄為有效代碼行的行號。
[0058]需要說明的是,第一代碼即為源代碼中除了注釋行、空白行和與源代碼執行不相關的符號(比如“{}”等)之外的、與實際執行相關的真實有效的代碼行。該實施例在對源代碼進行解析時會做預編譯處理,即對源代碼中的過濾掉注釋行、空白行和與源代碼執行不相關的符號信息進行過濾,能夠保證獲取到的有效代碼行的精確度。經過過濾掉注釋行、空白行和與源代碼執行不相關的符號信息后得到的有效代碼行如圖5所示。在保證從源代碼中解析得到的有效代碼行的精確度的基礎上,該實施例可以依據源代碼文件中存儲的行號與代碼行的對應關系,獲取較為準確的有效代碼行的行號,進而達到了提高獲取到的有效代碼行的行號的準確度的效果。
[0059]作為一種可選的實施例,步驟S202從對源代碼進行編譯所生成的編譯信息文件獲取基本塊的信息可以包括以下步驟:
[0060]步驟S2022,使用預定的標識符從編譯信息文件中獲取每個基本塊的信息,其中,標識符用于標識基本塊的起始位置。
[0061 ]步驟S2024,從基本塊的信息中識別出基本塊的標識、已編譯的代碼行的行號,其中,已編譯的代碼行的行號包括被記錄的最小行號和最大行號。
[0062]由上述實施例中對基本塊以及基本塊的信息的具體介紹可以知道在編譯信息文件中每個基本塊的起始位置處均有標識符,如圖4中的標識符01450000,需要說明的是,該標識符可以根據實際情況進行設定和調整,也即標識符并不僅限于01450000,其還可以是其他字符。在編譯信息文件中確定標識符之后可以從標識符所在字節至下一個標識符之間的字節識別出該基本塊的信息,該基本塊的信息可以包括但不僅限于基本塊的標識(如圖4中的00000001)、已編譯的代碼行的行號(如圖4中的00000028、0000002(:、0000002?),基本塊的信息還可以包括基本塊的長度(如圖4中的0000000B)、基本塊對應的代碼段編譯之后生成的二進制文件的文件名(如圖4中的0000632E74736574,文件名為“test.c”)等。需要說明的是,已編譯的代碼行的行號(如圖4中的0000002B、0000002C、0000002F)包括被記錄的最小行號和最大行號,如圖4所示,最小行號為0000002B,最大行號為0000002F。
[0063]該實施例通過獲取包括有已編譯的代碼行的行號的基本塊的信息,其中,已編譯的代碼行的行號包括被記錄的最小行號和最大行號,以便于建立基本塊與源代碼中代碼段的對應關系,并依據最小行號和最大行號確定漏記錄的行號,進而實現提高代碼行執行情況統計結果準確度的效果。
[0064]需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明并不受所描述的動作順序的限制,因為依據本發明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優選實施例,所涉及的動作和模塊并不一定是本發明所必須的。
[0065]通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到根據上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質(如R0M/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,或者網絡設備等)執行本發明各個實施例所述的方法。
[0066]實施例2
[0067]根據本發明實施例,還提供了一種用于實施上述代碼編譯結果的檢測方法的代碼編譯結果的檢測裝置。圖9是根據本發明實施例的代碼編譯結果的檢測裝置的示意圖,如圖9所示,該裝置可以包括:
[0068]第一獲取模塊22,用于從對源代碼進行編譯所生成的編譯信息文件中獲取基本塊的信息,其中,每個基本塊的信息包括:源代碼中的一段代碼中被記錄為已編譯的代碼行的行號;第二獲取模塊24,用于從源代碼中獲取有效代碼行的行號;檢測模塊26,用于檢測有效代碼行的行號中是否存在漏記錄的行號,其中,漏記錄的行號為未記錄在基本塊的信息中、且位于基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內;以及記錄模塊28,用于在檢測到有效代碼行的行號中存在漏記錄的行號時,將漏記錄的行號記錄為已編譯的代碼行的行號。
[0069]需要說明的是,該實施例中的第一獲取模塊22可以用于執行本申請實施例1中的步驟S202,該實施例中的第二獲取模塊24可以用于執行本申請實施例1中的步驟S204,該實施例中的檢測模塊26可以用于執行本申請實施例1中的步驟S206,該實施例中的記錄模塊28可以用于執行本申請實施例1中的步驟S208。
[0070]此處需要說明的是,上述模塊與對應的步驟所實現的示例和應用場景相同,但不限于上述實施例1所公開的內容。需要說明的是,上述模塊作為裝置的一部分可以運行在如圖1所示的硬件環境中,可以通過軟件實現,也可以通過硬件實現。
[0071]通過上述模塊,可以解決相關技術在代碼編譯過程中針對代碼行執行情況的統計結果不準確的技術問題,從而實現提高代碼編譯過程中代碼行執行情況統計結果的準確度的技術效果。
[0072]在第一獲取模塊22提供的方案中,源代碼進行編譯之后得到的文件為二進制文件,對該二進制文件進行反匯編操作可以得到編譯信息文件。編譯信息文件可以由反匯編代碼組成,根據這些反匯編代碼可以拆分成至少一個基本塊,每個基本塊對應源代碼中的一段代碼,一個代碼段可以包括至少一個代碼行。編譯信息文件可以如圖4所示,關于編譯信息文件和基本塊及其信息已經在本發明方法實施例中進行了詳細介紹,此處不再贅述。
[0073]在第二獲取模塊24提供的技術方案中,osx系統中源代碼文件一般為以.c或.cpp或.m為后綴的文件,本發明實施例可以使用Clang解析該源代碼文件,具體可以使用命令行“Clang-ccl-dump-tokens文件名”。需要說明的是,本發明實施例使用Clang對源代碼進行解析時可以將源代碼中的空白行、注釋行等無效行進行過濾,也可以將與實際執行無關的一些符號比如“{}”進行過濾,以便于使用Clang解析后得到的有效代碼行更加準確。在對源代碼進行解析得到有效代碼行之后,本發明實施例可以獲取有效代碼行的行號。在源代碼中每行代碼均對應一個行號,該行號用于標識該代碼行在源代碼文件中位置。需要說明的是,在源代碼文件中每行均對應一個行號,與行號對應的行可以為有效代碼行,也可以為空白行,還可以是符號。在源代碼文件中可以記錄有不同行號與代碼行的對應關系,在通過解析得到源代碼中的有效代碼行之后,可以依據源代碼文件中存儲的行號與代碼行的對應關系得到有效代碼行對應的行號。
[0074]在檢測模塊26提供的技術方案中,漏記錄的行號可以為未記錄在基本塊的信息中、且位于基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內的行號。從源代碼中獲取到的有效代碼行可以是一個,也可以是多個,相應地,有效代碼行的行號也可以是一個或者多個。本發明實施例通過檢測有效代碼行的行號中是否存在漏記錄的行號,目的是為了檢測在源代碼編譯過程中統計代碼行的執行情況時是否存在遺漏代碼行未統計,以達到保證源代碼中有效代碼行的執行情況的統計結果的準確性的效果。
[0075]在記錄模塊28提供的技術方案中,由于對應同一個基本塊的代碼行的執行次數相同,即當記錄在基本塊信息中已編譯的代碼行與漏記錄行號對應的代碼行的執行次數應該相同,也即在代碼編譯過程中記錄在基本塊信息中已編譯的代碼行被執行一次,則漏記錄行號對應的代碼行也執行一次。為了保證源代碼中有效代碼行的執行情況的統計結果的準確性,本發明實施例在檢測到有效代碼行的行號中存在漏記錄的行號時,可以將漏記錄的行號記錄為已編譯的代碼行的行號,以達到保證當記錄在基本塊信息中已編譯的代碼行與漏記錄行號對應的代碼行的執行次數相同的目的。
[0076]作為一種可選的實施例,圖10是根據本發明實施例的一種可選的代碼編譯結果的檢測裝置的示意圖,如圖10所示,記錄模塊28可以包括:補錄模塊282,用于將漏記錄的行號作為已編譯的代碼行的行號補入到源代碼被執行所生成的執行信息文件中,其中,執行信息文件至少包括:被記錄為已編譯的代碼行的行號,被記錄為已編譯的代碼行被執行的次數。
[0077]需要說明的是,該實施例中的補錄模塊282可以用于執行本申請實施例1中的步驟S2082。執行信息文件為對源代碼執行編譯后得到的文件,執行信息文件中可以被記錄為已編譯的代碼行的行號以及被記錄為已編譯的代碼行被執行的次數。在源代碼執行編譯后得到的執行信息文件中只包括有被記錄為已編譯的代碼行的行號和執行次數,對于漏記錄的行號和該行號對應的代碼行的執行次數并未在執行信息文件中記錄,因此,為了保證執行信息文件中記錄的關于代碼行的執行情況信息的準確性,該實施例可以將漏記錄的行號作為已編譯的代碼行的行號補入到源代碼被執行所生成的執行信息文件中。
[0078]該實施例通過將將漏記錄的行號作為已編譯的代碼行的行號補入到源代碼被執行所生成的執行信息文件中,提高了執行信息文件中反映的代碼行執行情況的準確性。同時,在執行信息文件中對代碼執行情況進行修改和保存,還能夠達到便于從執行信息文件中直接讀取代碼行執行情況的效果。
[0079]作為一種可選的實施例,圖11是根據本發明實施例的另一種可選的代碼編譯結果的檢測裝置的示意圖,如圖11所示,補錄模塊282可以包括:第一子補錄模塊2822,用于按照行號的順序將漏記錄的行號補入到執行信息文件中對應的位置上,并在位置上記錄漏記錄的行號對應的代碼行被執行的次數,其中,漏記錄的行號對應的代碼行被執行的次數等于漏記錄的行號所在的行號區間中已編譯的代碼行的行號對應的代碼行被執行的次數。
[0080]需要說明的是,該實施例中的第一子補錄模塊2822可以用于執行本申請實施例1中的步驟S20822。在將漏記錄的行號補如至執行信息文件中時,該實施例優選地按照行號順序進行補錄,可以是按照行號由小到大的順序,也可以是按照行號由大到小的順序。按照行號順序補錄漏記錄的行號,能夠便于從執行信息文件中快速定位行號所在位置,按照行號順序尤其是在代碼行行數特別多個情況下優點更為突出。
[0081]可選地,在將漏記錄的行號補入執行信息文件中時,該實施例還可以將漏記錄的行號對應的代碼行的執行次數補入在該行號的對應位置上。此處需要說明的是,漏記錄的行號對應的代碼行被執行的次數等于漏記錄的行號所在的行號區間中已編譯的代碼行的行號對應的代碼行被執行的次數。該實施例通過將漏記錄的行號以及該行號對應的代碼行的執行次數一并補入執行信息文件中,能夠達到便于直接從執行信息文件中得到每個代碼行執行情況的效果。
[0082]作為一種可選的實施例,圖12是根據本發明實施例的再一種可選的代碼編譯結果的檢測裝置的示意圖,如圖12所示,第二獲取模塊24可以包括:過濾模塊242,用于從源代碼中過濾掉注釋行、空白行和與源代碼執行不相關的符號信息,得到第一代碼;第一子記錄模塊244,用于將第一代碼中的代碼行的行號記錄為有效代碼行的行號。
[0083]需要說明的是,該實施例中的過濾模塊242可以用于執行本申請實施例1中的步驟S2042,該實施例中的第一子記錄模塊244可以用于執行本申請實施例1中的步驟S2044。
[0084]需要說明的是,第一代碼即為源代碼中除了注釋行、空白行和與源代碼執行不相關的符號(比如“{}”等)之外的、與實際執行相關的真實有效的代碼行。該實施例在對源代碼進行解析時會做預編譯處理,即對源代碼中的過濾掉注釋行、空白行和與源代碼執行不相關的符號信息進行過濾,能夠保證獲取到的有效代碼行的精確度。在保證從源代碼中解析得到的有效代碼行的精確度的基礎上,該實施例可以依據源代碼文件中存儲的行號與代碼行的對應關系,獲取較為準確的有效代碼行的行號,進而達到了提高獲取到的有效代碼行的行號的準確度的效果。
[0085]作為一種可選的實施例,圖13是根據本發明實施例的又一種可選的代碼編譯結果的檢測裝置的示意圖,如圖13所示,第一獲取模塊22可以包括:第一子獲取模塊222,用于使用預定的標識符從編譯信息文件中獲取每個基本塊的信息,其中,標識符用于標識基本塊的起始位置;識別模塊224,用于從基本塊的信息中識別出基本塊的標識、已編譯的代碼行的行號,其中,已編譯的代碼行的行號包括被記錄的最小行號和最大行號。
[0086]需要說明的是,該實施例中的第一子獲取模塊222可以用于執行本申請實施例1中的步驟S2022,該實施例中的識別模塊224可以用于執行本申請實施例1中的步驟S2024。
[0087]由上述實施例中對基本塊以及基本塊的信息的具體介紹可以知道在編譯信息文件中每個基本塊的起始位置處均有標識符,需要說明的是,該標識符可以根據實際情況進行設定和調整,也即標識符并不僅限于圖4中的01450000,其還可以是其他字符。在編譯信息文件中確定標識符之后可以從標識符所在字節至下一個標識符之間的字節識別出該基本塊的信息,該基本塊的信息可以包括但不僅限于基本塊的標識、已編譯的代碼行的行號,基本塊的信息還可以包括基本塊的長度、基本塊對應的代碼段編譯之后生成的二進制文件的文件名等。需要說明的是,已編譯的代碼行的行號包括被記錄的最小行號和最大行號。
[0088]該實施例通過獲取包括有已編譯的代碼行的行號的基本塊的信息,其中,已編譯的代碼行的行號包括被記錄的最小行號和最大行號,以便于建立基本塊與源代碼中代碼段的對應關系,并依據最小行號和最大行號確定漏記錄的行號,進而實現提高代碼行執行情況統計結果準確度的效果。
[0089]此處需要說明的是,上述模塊與對應的步驟所實現的示例和應用場景相同,但不限于上述實施例1所公開的內容。需要說明的是,上述模塊作為裝置的一部分可以運行在如圖1所示的硬件環境中,可以通過軟件實現,也可以通過硬件實現,其中,硬件環境包括網絡環境。
[0090]實施例3
[0091]根據本發明實施例,還提供了一種用于實施上述代碼編譯結果的檢測方法的服務器或終端。
[0092]圖14是根據本發明實施例的一種終端的結構框圖,如圖14所示,該終端可以包括:一個或多個(圖中僅示出一個)處理器201、存儲器203、以及傳輸裝置205(如上述實施例中的發送裝置),如圖14所示,該終端還可以包括輸入輸出設備207。
[0093]其中,存儲器203可用于存儲軟件程序以及模塊,如本發明實施例中的代碼編譯結果的檢測方法和裝置對應的程序指令/模塊,處理器201通過運行存儲在存儲器203內的軟件程序以及模塊,從而執行各種功能應用以及數據處理,即實現上述的代碼編譯結果的檢測方法。存儲器203可包括高速隨機存儲器,還可以包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態存儲器。在一些實例中,存儲器203可進一步包括相對于處理器201遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至終端。上述網絡的實例包括但不限于互聯網、企業內部網、局域網、移動通信網及其組合。
[0094]上述的傳輸裝置205用于經由一個網絡接收或者發送數據,還可以用于處理器與存儲器之間的數據傳輸。上述的網絡具體實例可包括有線網絡及無線網絡。在一個實例中,傳輸裝置205包括一個網絡適配器(Network Interface Controller,NIC),其可通過網線與其他網絡設備與路由器相連從而可與互聯網或局域網進行通訊。在一個實例中,傳輸裝置205為射頻(Rad1 Frequency,RF)模塊,其用于通過無線方式與互聯網進行通訊。
[0095]其中,具體地,存儲器203用于存儲應用程序。
[0096]處理器201可以通過傳輸裝置205調用存儲器203存儲的應用程序,以執行下述步驟:從對源代碼進行編譯所生成的編譯信息文件中獲取基本塊的信息,其中,每個基本塊的信息包括:源代碼中的一段代碼中被記錄為已編譯的代碼行的行號;從源代碼中獲取有效代碼行的行號;檢測有效代碼行的行號中是否存在漏記錄的行號,其中,漏記錄的行號為未記錄在基本塊的信息中、且位于基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內;以及在檢測到有效代碼行的行號中存在漏記錄的行號時,將漏記錄的行號記錄為已編譯的代碼行的行號。
[0097]處理器201還用于執行下述步驟:將漏記錄的行號作為已編譯的代碼行的行號補入到源代碼被執行所生成的執行信息文件中,其中,執行信息文件至少包括:被記錄為已編譯的代碼行的行號,被記錄為已編譯的代碼行被執行的次數。
[0098]處理器201還用于執行下述步驟:按照行號的順序將漏記錄的行號補入到執行信息文件中對應的位置上,并在位置上記錄漏記錄的行號對應的代碼行被執行的次數,其中,漏記錄的行號對應的代碼行被執行的次數等于漏記錄的行號所在的行號區間中已編譯的代碼行的行號對應的代碼行被執行的次數。
[0099]處理器201還用于執行下述步驟:從源代碼中過濾掉注釋行、空白行和與源代碼執行不相關的符號信息,得到第一代碼;將第一代碼中的代碼行的行號記錄為有效代碼行的行號。
[0100]處理器201還用于執行下述步驟:使用預定的標識符從編譯信息文件中獲取每個基本塊的信息,其中,標識符用于標識基本塊的起始位置;從基本塊的信息中識別出基本塊的標識、已編譯的代碼行的行號,其中,已編譯的代碼行的行號包括被記錄的最小行號和最大行號。
[0101]采用本發明實施例,提供了一種代碼編譯結果的檢測方案。通過從源代碼編譯產生的編譯信息文件中獲取基本塊的信息,依據基本塊的信息檢測源代碼中的有效代碼行的行號中是否存在未記錄在基本塊的信息中且位于基本塊的信息中記錄的最小行號和最大行號之間的行號,若存在則將未記錄在基本塊的信息中的行號記錄為已編譯的代碼行的行號,達到了準確統計代碼編譯過程中有效代碼行執行情況的目的,進而解決了相關技術在代碼編譯過程中針對代碼行執行情況的統計結果不準確的技術問題,實現了提高代碼編譯過程中代碼行執行情況統計結果的準確度的技術效果。
[0102]可選地,本實施例中的具體示例可以參考上述實施例1和實施例2中所描述的示例,本實施例在此不再贅述。
[0103]本領域普通技術人員可以理解,圖14所示的結構僅為示意,終端可以是智能手機(如Android手機、1S手機等)、平板電腦、掌上電腦以及移動互聯網設備(Mobile InternetDevices,MID)、PAD等終端設備。圖14其并不對上述電子裝置的結構造成限定。例如,終端還可包括比圖14中所示更多或者更少的組件(如網絡接口、顯示裝置等),或者具有與圖14所示不同的配置。
[0104]本領域普通技術人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令終端設備相關的硬件來完成,該程序可以存儲于一計算機可讀存儲介質中,存儲介質可以包括:閃存盤、只讀存儲器(Read-Only Memory,ROM)、隨機存取器(RandomAccess Memory,RAM)、磁盤或光盤等。
[0105]實施例4
[0106]本發明的實施例還提供了一種存儲介質。可選地,在本實施例中,上述存儲介質可以用于執行代碼編譯結果的檢測方法的程序代碼。
[0107]可選地,在本實施例中,上述存儲介質可以位于上述實施例所示的網絡中的多個網絡設備中的至少一個網絡設備上。
[0108]可選地,在本實施例中,存儲介質被設置為存儲用于執行以下步驟的程序代碼:
[0109]SI,從對源代碼進行編譯所生成的編譯信息文件中獲取基本塊的信息,其中,每個基本塊的信息包括:源代碼中的一段代碼中被記錄為已編譯的代碼行的行號;
[0110]S2,從源代碼中獲取有效代碼行的行號;
[0111]S3,檢測有效代碼行的行號中是否存在漏記錄的行號,其中,漏記錄的行號為未記錄在基本塊的信息中、且位于基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內;
[0112]S4,在檢測到有效代碼行的行號中存在漏記錄的行號時,將漏記錄的行號記錄為已編譯的代碼行的行號。
[0113]可選地,存儲介質還被設置為存儲用于執行以下步驟的程序代碼:將漏記錄的行號作為已編譯的代碼行的行號補入到源代碼被執行所生成的執行信息文件中,其中,執行信息文件至少包括:被記錄為已編譯的代碼行的行號,被記錄為已編譯的代碼行被執行的次數。
[0114]可選地,存儲介質還被設置為存儲用于執行以下步驟的程序代碼:按照行號的順序將漏記錄的行號補入到執行信息文件中對應的位置上,并在位置上記錄漏記錄的行號對應的代碼行被執行的次數,其中,漏記錄的行號對應的代碼行被執行的次數等于漏記錄的行號所在的行號區間中已編譯的代碼行的行號對應的代碼行被執行的次數。
[0115]可選地,存儲介質還被設置為存儲用于執行以下步驟的程序代碼:從源代碼中過濾掉注釋行、空白行和與源代碼執行不相關的符號信息,得到第一代碼;將第一代碼中的代碼行的行號記錄為有效代碼行的行號。
[0116]可選地,存儲介質還被設置為存儲用于執行以下步驟的程序代碼:使用預定的標識符從編譯信息文件中獲取每個基本塊的信息,其中,標識符用于標識基本塊的起始位置;從基本塊的信息中識別出基本塊的標識、已編譯的代碼行的行號,其中,已編譯的代碼行的行號包括被記錄的最小行號和最大行號。
[0117]可選地,本實施例中的具體示例可以參考上述實施例1和實施例2中所描述的示例,本實施例在此不再贅述。
[0118]可選地,在本實施例中,上述存儲介質可以包括但不限于:U盤、只讀存儲器(R0M,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質。
[0119]上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。
[0120]上述實施例中的集成的單元如果以軟件功能單元的形式實現并作為獨立的產品銷售或使用時,可以存儲在上述計算機可讀取的存儲介質中。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在存儲介質中,包括若干指令用以使得一臺或多臺計算機設備(可為個人計算機、服務器或者網絡設備等)執行本發明各個實施例所述方法的全部或部分步驟。
[0121]在本發明的上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
[0122]在本申請所提供的幾個實施例中,應該理解到,所揭露的客戶端,可通過其它的方式實現。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
[0123]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
[0124]另外,在本發明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現,也可以采用軟件功能單元的形式實現。
[0125]以上所述僅是本發明的優選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。
【主權項】
1.一種代碼編譯結果的檢測方法,其特征在于,包括: 從對源代碼進行編譯所生成的編譯信息文件中獲取基本塊的信息,其中,每個所述基本塊的信息包括:所述源代碼中的一段代碼中被記錄為已編譯的代碼行的行號; 從所述源代碼中獲取有效代碼行的行號; 檢測所述有效代碼行的行號中是否存在漏記錄的行號,其中,所述漏記錄的行號為未記錄在所述基本塊的信息中、且位于所述基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內的行號;以及 在檢測到所述有效代碼行的行號中存在所述漏記錄的行號時,將所述漏記錄的行號記錄為已編譯的代碼行的行號。2.根據權利要求1所述的方法,其特征在于,將所述漏記錄的行號記錄為已編譯的代碼行的行號包括: 將所述漏記錄的行號作為已編譯的代碼行的行號補入到所述源代碼被執行所生成的執行信息文件中,其中,所述執行信息文件至少包括:所述被記錄為已編譯的代碼行的行號,所述被記錄為已編譯的代碼行被執行的次數。3.根據權利要求2所述的方法,其特征在于,將所述漏記錄的行號作為已編譯的代碼行的行號補入到所述源代碼被執行所生成的執行信息文件中包括: 按照行號的順序將所述漏記錄的行號補入到所述執行信息文件中對應的位置上,并在所述位置上記錄所述漏記錄的行號對應的代碼行被執行的次數,其中,所述漏記錄的行號對應的代碼行被執行的次數等于所述漏記錄的行號所在的行號區間中已編譯的代碼行的行號對應的代碼行被執行的次數。4.根據權利要求1所述的方法,其特征在于,從所述源代碼中獲取有效代碼行的行號包括: 從所述源代碼中過濾掉注釋行、空白行和與所述源代碼執行不相關的符號信息,得到第一代碼; 將所述第一代碼中的代碼行的行號記錄為所述有效代碼行的行號。5.根據權利要求1所述的方法,其特征在于,從對源代碼進行編譯所生成的編譯信息文件獲取基本塊的信息包括: 使用預定的標識符從所述編譯信息文件中獲取每個所述基本塊的信息,其中,所述標識符用于標識所述基本塊的起始位置; 從所述基本塊的信息中識別出所述基本塊的標識、所述已編譯的代碼行的行號,其中,所述已編譯的代碼行的行號包括所述被記錄的最小行號和最大行號。6.一種代碼編譯結果的檢測裝置,其特征在于,包括: 第一獲取模塊,用于從對源代碼進行編譯所生成的編譯信息文件中獲取基本塊的信息,其中,每個所述基本塊的信息包括:所述源代碼中的一段代碼中被記錄為已編譯的代碼行的行號; 第二獲取模塊,用于從所述源代碼中獲取有效代碼行的行號; 檢測模塊,用于檢測所述有效代碼行的行號中是否存在漏記錄的行號,其中,所述漏記錄的行號為未記錄在所述基本塊的信息中、且位于所述基本塊的信息包括的被記錄的最小行號和最大行號所構成的行號區間內的行號;以及 記錄模塊,用于在檢測到所述有效代碼行的行號中存在所述漏記錄的行號時,將所述漏記錄的行號記錄為已編譯的代碼行的行號。7.根據權利要求6所述的裝置,其特征在于,所述記錄模塊包括: 補錄模塊,用于將所述漏記錄的行號作為已編譯的代碼行的行號補入到所述源代碼被執行所生成的執行信息文件中,其中,所述執行信息文件至少包括:所述被記錄為已編譯的代碼行的行號,所述被記錄為已編譯的代碼行被執行的次數。8.根據權利要求7所述的裝置,其特征在于,所述補錄模塊包括: 第一子補錄模塊,用于按照行號的順序將所述漏記錄的行號補入到所述執行信息文件中對應的位置上,并在所述位置上記錄所述漏記錄的行號對應的代碼行被執行的次數,其中,所述漏記錄的行號對應的代碼行被執行的次數等于所述漏記錄的行號所在的行號區間中已編譯的代碼行的行號對應的代碼行被執行的次數。9.根據權利要求6所述的裝置,其特征在于,所述第二獲取模塊包括: 過濾模塊,用于從所述源代碼中過濾掉注釋行、空白行和與所述源代碼執行不相關的符號信息,得到第一代碼; 第一子記錄模塊,用于將所述第一代碼中的代碼行的行號記錄為所述有效代碼行的行號。10.根據權利要求6所述的裝置,其特征在于,所述第一獲取模塊包括: 第一子獲取模塊,用于使用預定的標識符從所述編譯信息文件中獲取每個所述基本塊的信息,其中,所述標識符用于標識所述基本塊的起始位置; 識別模塊,用于從所述基本塊的信息中識別出所述基本塊的標識、所述已編譯的代碼行的行號,其中,所述已編譯的代碼行的行號包括所述被記錄的最小行號和最大行號。
【文檔編號】G06F11/36GK105843740SQ201610172311
【公開日】2016年8月10日
【申請日】2016年3月23日
【發明人】劉華星, 唐志彬, 朱喬
【申請人】騰訊科技(深圳)有限公司