一種可追溯目標碼的生成方法及可追溯目標碼生成器的制造方法
【專利摘要】本發(fā)明提供一種可追溯目標碼的生成方法及可追溯目標碼生成器??勺匪菽繕舜a的生成方法包括:獲取編譯環(huán)境信息,獲取源碼版本信息,解析所述編譯環(huán)境信息和所述源碼版本信息,形成預(yù)編譯信息,將所述預(yù)編譯信息寫入目標碼。本發(fā)明提供的可追溯目標碼的生成方法及可追溯目標碼生成器在生成目標碼的過程中,提取原始編譯腳本的版本信息和編譯環(huán)境信息,通過預(yù)編譯的方式將版本信息和編譯環(huán)境信息植入目標碼。因此當目標碼運行過程中出現(xiàn)問題時,能夠方便從目標碼中定位編譯過程中源碼的版本信息并確定目標碼編譯時的編譯環(huán)境信息,能夠提高修復(fù)目標碼的工作效率。
【專利說明】—種可追溯目標碼的生成方法及可追溯目標碼生成器
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機編譯領(lǐng)域,特別是涉及一種可追溯目標碼的生成方法及可追溯目標碼生成器。
【背景技術(shù)】
[0002]隨著計算機技術(shù)的發(fā)展,越來越多的工作能夠由計算機完成。人與計算機的交互需要通過計算機能夠識別的語言完成。在實現(xiàn)特定功能時,工程師需要編寫特定的語言,供計算機識別。但這些語言有高級語言,有低級語言。計算機只能識別最低級的語言。因此,要實現(xiàn)計算機識別語言,需要將高級的語言一步步變成低級的計算機能夠直接識別的語言,這個過程,通常表現(xiàn)為將源代碼轉(zhuǎn)換為目標碼。
[0003]源代碼轉(zhuǎn)化的目標碼出錯后,需要尋找到其對應(yīng)的源代碼的信息,以及源代碼轉(zhuǎn)化為目標碼時的轉(zhuǎn)化環(huán)境,以便有針對性地改正出錯的部分,使其功能正常實現(xiàn)。
[0004]但是目前的目標碼不含有源代碼版本信息和轉(zhuǎn)換環(huán)境,在出問題時就無法向源代碼進行追溯,導致修復(fù)目標碼時效率降低。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是提供一種可追溯目標碼的生成方法及可追溯目標碼生成器,實現(xiàn)目標碼向源代碼的可追溯性,提高修復(fù)目標碼的效率。
[0006]一種可追溯目標碼的生成方法,包括:
[0007]獲取編譯環(huán)境信息;
[0008]獲取源碼版本信息;
[0009]解析所述編譯環(huán)境信息和所述源碼版本信息,形成預(yù)編譯信息;
[0010]將所述預(yù)編譯信息寫入目標碼。
[0011]優(yōu)選地,所述獲取編譯環(huán)境信息包括:
[0012]提取環(huán)境變量;
[0013]獲取所述環(huán)境變量包含的編譯環(huán)境信息。
[0014]優(yōu)選地,所述源碼獲取源碼版本信息包括:
[0015]提取版本信息變量;
[0016]獲取所述版本信息變量包含的所述源碼版本信息。
[0017]優(yōu)選地,所述解析所述編譯環(huán)境信息和所述源碼版本信息,形成預(yù)編譯信息包括:
[0018]將所述環(huán)境變量和所述版本信息變量寫入預(yù)編譯文件;
[0019]對述預(yù)編譯文件解析,形成含有所述編譯環(huán)境信息和所述源碼版本信息的預(yù)編譯信息。
[0020]優(yōu)選地,所述將所述預(yù)編譯信息寫入目標碼,包括:
[0021 ]通過鏈接參數(shù)鏈接所述預(yù)編譯信息和所述目標碼。
[0022]一種可追溯目標碼生成器,包括:
[0023]環(huán)境信息獲取模塊,用于獲取編譯環(huán)境信息;
[0024]版本信息獲取模塊,用于獲取源碼版本信息;
[0025]與所述環(huán)境信息獲取模塊和所述版本信息獲取模塊相連的預(yù)編譯模塊,用于解析所述編譯環(huán)境信息和所述源碼版本信息,形成預(yù)編譯信息;
[0026]與所述預(yù)編譯模塊相連的寫入模塊,用于將所述預(yù)編譯信息寫入目標碼。
[0027]優(yōu)選地,所述環(huán)境信息獲取模塊包括:
[0028]第一提取單元,用于提取環(huán)境變量;
[0029]與所述第一提取單元相連的環(huán)境信息獲取單元,用于獲取所述環(huán)境變量包含的所述編譯環(huán)境信息。
[0030]優(yōu)選地,所述版本信息獲取模塊包括:
[0031]第二提取單元,用于提取版本信息變量;
[0032]與所述第二提取單元相連的版本信息獲取單元,用于獲取所述版本信息變量包含的所述源碼版本信息。
[0033]優(yōu)選地,所述預(yù)編譯模塊包括:
[0034]預(yù)編譯信息寫入單元,用于將所述環(huán)境變量和所述版本信息變量寫入預(yù)編譯文件;
[0035]與所述預(yù)編譯信息寫入單元相連的解析單元,用于對述預(yù)編譯文件解析,形成含有所述編譯環(huán)境信息和所述源碼版本信息的預(yù)編譯信息。
[0036]優(yōu)選地,所述寫入模塊包括:
[0037]鏈接參數(shù)單元,用于鏈接所述預(yù)編譯信息和所述目標碼。
[0038]因此,本發(fā)明具有如下有益效果:
[0039]本發(fā)明在生成目標碼的過程中,提取原始編譯腳本的版本信息和編譯環(huán)境信息,通過預(yù)編譯的方式將版本信息和編譯環(huán)境信息植入目標碼。因此當目標碼運行過程中出現(xiàn)問題時,能夠方便從目標碼中定位編譯過程中源碼的版本信息并確定目標碼編譯時的編譯環(huán)境信息。提高了修復(fù)目標碼的工作效率。
【專利附圖】
【附圖說明】
[0040]圖1為本發(fā)明提供的一種可追溯目標碼的生成方法流程圖;
[0041]圖2為本發(fā)明提供的另一種可追溯目標碼的生成方法流程圖;
[0042]圖3為本發(fā)明提供的一種可追溯目標碼的生成器結(jié)構(gòu)示意圖;
[0043]圖4為本發(fā)明提供的可追溯目標碼的生成器中一種具體的環(huán)境信息獲取模塊結(jié)構(gòu)示意圖;
[0044]圖5為本發(fā)明提供的可追溯目標碼的生成器中一種具體的版本信息獲取模塊結(jié)構(gòu)示意圖;
[0045]圖6為本發(fā)明提供的可追溯目標碼的生成器中一種具體的預(yù)編譯模塊結(jié)構(gòu)示意圖;
[0046]圖7為本發(fā)明提供的可追溯目標碼的生成器中一種具體的寫入模塊結(jié)構(gòu)示意圖;
[0047]圖8為本發(fā)明提供的另一種可追溯目標碼的生成器結(jié)構(gòu)示意圖。
【具體實施方式】
[0048]本發(fā)明的核心是提供一種可追溯目標碼的生成方法和可追溯目標碼生成器實現(xiàn)目標碼出問題時,可以準確定位編譯目標碼過程中所用到的編譯環(huán)境和源碼版本,提高修復(fù)目標碼的效率。
[0049]為了使本【技術(shù)領(lǐng)域】的人員更好地理解本發(fā)明的方案,下面結(jié)合附圖和【具體實施方式】對本發(fā)明作進一步的詳細說明。
[0050]本發(fā)明公開的一種可追溯目標碼的生成方法,參見圖1,該方法包括以下步驟:
[0051]S101、獲取編譯環(huán)境信息。
[0052]編譯環(huán)境信息可以包括編譯時使用的操作系統(tǒng)、中間件、數(shù)據(jù)庫、可以唯一標識編譯環(huán)境信息的編譯機器名、標識編譯人員信息的編譯用戶名、以及編譯日期和時間。
[0053]S102、獲取源碼版本信息。
[0054]在需要追溯源碼信息時,查看源碼版本信息能夠知道源碼的哪一部分做了改動,更有助于提高修復(fù)源碼的效率。
[0055]S103、解析所述編譯環(huán)境信息和所述源碼版本信息,形成預(yù)編譯信息。
[0056]在具體的預(yù)編譯過程中,往往是對攜帶有獲取編譯環(huán)境信息命令和獲取源碼版本信息命令的變量的值進行解析,得到含有編譯環(huán)境信息和源碼版本信息的預(yù)編譯信息。
[0057]S104、將所述預(yù)編譯信息寫入目標碼。
[0058]在本實施方案中,獲取編譯環(huán)境信息和獲取源碼版本信息之間沒有先后順序。本方案提供的先獲取編譯環(huán)境信息再獲取源碼版本信息指示一個具體舉例。在其他情況下,可以根據(jù)需要先獲取源碼版本信息或者同時獲取編譯環(huán)境信息和源碼版本信息。
[0059]本發(fā)明在編譯源碼生成目標碼的過程中,提取原始編譯腳本的版本信息和編譯環(huán)境信息,將版本信息和編譯環(huán)境信息經(jīng)過預(yù)編譯形成預(yù)編譯信息并植入目標碼。當目標碼運行出錯,能夠方便從目標碼中定位編譯過程中源碼的版本信息并確定目標碼編譯時的編譯機器、編譯用戶等信息。這樣的準確定位提高了修復(fù)目標碼的工作效率。而且,在將版本信息和編譯環(huán)境信息植入目標碼的過程中,用到的是原始編譯腳本,因而不需要增加其他資源,調(diào)用其他模塊。
[0060]本發(fā)明公開的另一種可追溯目標碼的生成方法,參見圖2,該方法包括以下步驟:
[0061]S201、提取環(huán)境變量。
[0062]在環(huán)境變量中,包含了提取編譯環(huán)境信息的命令。要最終獲取編譯環(huán)境信息,首先需要提取環(huán)境變量。
[0063]S202、獲取所述環(huán)境變量包含的編譯環(huán)境信息。
[0064]在一個具體場景下,以buildinfo作為環(huán)境變量,以C語言為例,獲取編譯環(huán)境信息的方式可以是以下語句:
[0065]buildinfo = "const char zgbbuildinfo [] = Builton' uname-n' by' id-un' at' date+% Y% m% d'' date+% T' 其中 uname-n 可以獲取 unix環(huán)境下的機器名,id-un是獲取編譯時所用用戶信息,date ate+% Y% m% d是獲取編譯時的日期,而date+% T則是獲取編譯時間。在編譯過程中會將上述命令執(zhí)行的結(jié)果賦值給buildinfo 變量。
[0066]當然,在不同的情況下,可以根據(jù)需要提取相關(guān)的編譯環(huán)境信息。
[0067]S203、提取版本信息變量。
[0068]在這里,版本信息變量中包含了獲取源碼版本信息的命令,編譯過程中會將獲取源碼版本信息的命令的執(zhí)行結(jié)果賦值給版本信息變量。因而在獲取版本信息前,先提取版本信息變量。
[0069]S204、獲取所述版本信息變量包含的所述源碼版本信息。
[0070]在一個具體場景下,以vers1ninfo作為環(huán)境變量,以C語言為例,獲取源碼版本信息的方式如下述語句:
[0071]vers1ninfo = 〃const char zgbbuildinfo[] = \〃Baseline:'cat$(HOME)/.baseline'\〃〃其中cat$(H0ME)/.baseline就是從baseline文件中獲取源碼版本信息。
[0072]S205、將所述環(huán)境變量和所述版本信息變量寫入預(yù)編譯文件。
[0073]在本實施例中,可以是將buildinfo變量和vers1ninfo變量寫入預(yù)編譯文件中。
[0074]S206、對述預(yù)編譯文件解析,形成含有所述編譯環(huán)境信息和所述源碼版本信息的預(yù)編譯信息。
[0075]同樣的,以在C語言環(huán)境下為例,
[0076]將buildinfo變量和vers1ninfo變量寫入缺省info, c文件后,通過cc-c info,c生成info, ο,其中cc-c info, c即為預(yù)編譯的過程。在預(yù)編譯的過程中,對buildinfo變量和vers1ninfo變量的值進行解析,得到預(yù)編譯信息。
[0077]在一個具體的實例中,預(yù)編譯信息帶有“Baseline:PETS_PRBL_V3.0.0 Built onD_P595A1_M by p59new at 2014081816:35:38” 這樣的信息。
[0078]這里面,PETS_PRBL_V3.0.0即是源碼基線,包含確定的源碼版本信息,D_P595A1_M是機器名,p59new是編譯用戶名,20140818為編譯日期,16:35:38為編譯時間。
[0079]這樣,在預(yù)編譯信息中就包含了所需的編譯環(huán)境信息和源碼版本信息。當然,在不同的情況下,具體的信息是不同的。在提取信息時,也可以根據(jù)需要提取。
[0080]S207、通過鏈接參數(shù)鏈接所述預(yù)編譯信息和所述目標碼。
[0081]利用不同的編譯器的鏈接參數(shù),將預(yù)編譯信息與目標碼鏈接,實現(xiàn)預(yù)編譯信息的植入。
[0082]在具體的實例中,仍以C語言環(huán)境為例,編譯器cc的鏈接參數(shù)為:LINKFLAGS=-bkeepfile:1nfo, o info, ο
[0083]生成目標碼bin的方式如下:
[0084]cc-o bin bin.0$ (LINKFLAGS)其中cc命令將info, ο中的信息全部寫入目標碼bin 中。
[0085]本發(fā)明公開的一種可追溯目標碼生成器,參見圖3,包括以下部分:環(huán)境信息獲取模塊10,用于獲取編譯環(huán)境信息。
[0086]版本信息獲取模塊20,用于獲取源碼版本信息。
[0087]與所述環(huán)境信息獲取模塊10和所述版本信息獲取模塊20相連的預(yù)編譯模塊30,用于解析所述編譯環(huán)境信息和所述源碼版本信息,形成預(yù)編譯信息。
[0088]與所述預(yù)編譯模塊30相連的寫入模塊40,用于將所述預(yù)編譯信息寫入目標碼。
[0089]本發(fā)明提供的可追溯目標碼生成器,由環(huán)境信息獲取模塊獲取編譯環(huán)境信息,由版本信息模塊獲取源碼版本信息。預(yù)編譯模塊將環(huán)境信息模塊獲取的編譯環(huán)境信息和版本信息模塊獲取的源碼版本信息進行解析并形成預(yù)編譯信息。最后寫入模塊將預(yù)編譯信息植入目標碼。這樣目標碼中就帶有編譯時的源碼版本信息和編譯環(huán)境信息,包括編譯機器、編譯用戶、編譯時間等。一旦目標碼出現(xiàn)問題時,可以準確定位,減少修復(fù)目標碼的時間,提高效率。
[0090]在本發(fā)明公開的另一種可追溯目標碼生成器中,參見圖4,環(huán)境信息獲取模塊10包括第一提取單元11,用于提取環(huán)境變量。
[0091]與所述第一提取單元11相連的環(huán)境信息獲取單元12,用于獲取所述環(huán)境變量包含的所述編譯環(huán)境信息。
[0092]具體的工作原理請參見可追溯目標碼的生成方法實施例中步驟S201和步驟S202的表述,此處不再贅述。
[0093]在本發(fā)明公開的另一種可追溯目標碼生成器中,參見圖5,版本信息獲取模塊20包括第二提取單元21,用于提取版本信息變量。
[0094]與所述第二提取單元21相連的版本信息獲取單元22,用于獲取所述版本信息變量包含的所述源碼版本信息。
[0095]具體的工作原理請參見可追溯目標碼的生成方法實施例中步驟S203和步驟S204的表述,此處不再贅述。
[0096]在本發(fā)明公開的另一種可追溯目標碼生成器中,參見圖6,預(yù)編譯模塊30包括預(yù)編譯信息寫入單元31,用于將所述環(huán)境變量和所述版本信息變量寫入預(yù)編譯文件。
[0097]與所述預(yù)編譯信息寫入單元31相連的解析單元32,用于對述預(yù)編譯文件解析,形成含有所述編譯環(huán)境信息和所述源碼版本信息的預(yù)編譯信息。
[0098]具體的工作原理請參見可追溯目標碼的生成方法實施例中步驟S205和步驟S206的表述,此處不再贅述。
[0099]在本發(fā)明公開的另一種可追溯目標碼生成器中,參見圖7,寫入模塊40包括鏈接參數(shù)單元41,用于鏈接預(yù)編譯信息和目標碼。
[0100]具體的工作原理請參見可追溯目標碼的生成方法實施例中步驟S207的表述,此處不再贅述。
[0101]本發(fā)明公開的另一種可追溯目標碼生成器,參見圖8,包括以下部分:
[0102]第一提取單元11,用于提取環(huán)境變量。
[0103]與所述第一提取單元11相連的環(huán)境信息獲取單元12,用于獲取所述環(huán)境變量包含的所述編譯環(huán)境信息。
[0104]第二提取單元21,用于提取版本信息變量。
[0105]與所述第二提取單元21相連的版本信息獲取單元22,用于獲取所述版本信息變量包含的所述源碼版本信息。
[0106]與所述環(huán)境信息獲取單元12相連且與所述版本信息獲取單元22相連的預(yù)編譯信息寫入單元31,用于將所述環(huán)境變量和所述版本信息變量寫入預(yù)編譯文件。
[0107]與所述預(yù)編譯信息寫入單元31相連的解析單元32,用于對述預(yù)編譯文件解析,形成含有所述編譯環(huán)境信息和所述源碼版本信息的預(yù)編譯信息。
[0108]與解析單元32相連的鏈接參數(shù)單元41,用于鏈接所述預(yù)編譯信息和所述目標碼。
[0109]具體的,本發(fā)明提供的可追溯目標碼生成器的實施方案中各組成部分的工作原理請參見可追溯目標碼的生成方法實施方案,此處不再贅述。
[0110]以上對本發(fā)明所提供的可追溯目標碼的生成方法及可追溯目標碼生成器進行了詳細介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的核心思想。應(yīng)當指出,對于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進行若干改進和修飾,這些改進和修飾也落入本發(fā)明權(quán)利要求的保護范圍內(nèi)。
【權(quán)利要求】
1.一種可追溯目標碼的生成方法,其特征在于,包括: 獲取編譯環(huán)境信息; 獲取源碼版本信息; 解析所述編譯環(huán)境信息和所述源碼版本信息,形成預(yù)編譯信息; 將所述預(yù)編譯信息寫入目標碼。
2.如權(quán)利要求1所述的可追溯目標碼的生成方法,其特征在于,所述獲取編譯環(huán)境信息包括: 提取環(huán)境變量; 獲取所述環(huán)境變量包含的編譯環(huán)境信息。
3.如權(quán)利要求1所述的可追溯目標碼的生成方法,其特征在于,所述源碼獲取源碼版本信息包括: 提取版本信息變量; 獲取所述版本信息變量包含的所述源碼版本信息。
4.如權(quán)利要求1所述的可追溯目標碼的生成方法,其特征在于,所述解析所述編譯環(huán)境信息和所述源碼版本信息,形成預(yù)編譯信息包括: 將所述環(huán)境變量和所述版本信息變量寫入預(yù)編譯文件; 對述預(yù)編譯文件解析,形成含有所述編譯環(huán)境信息和所述源碼版本信息的預(yù)編譯信肩、O
5.如權(quán)利要求1所述的可追溯目標碼的生成方法,其特征在于,所述將所述預(yù)編譯信息寫入目標碼,包括: 通過鏈接參數(shù)鏈接所述預(yù)編譯信息和所述目標碼。
6.一種可追溯目標碼生成器,其特征在于,包括: 環(huán)境信息獲取模塊,用于獲取編譯環(huán)境信息; 版本信息獲取模塊,用于獲取源碼版本信息; 與所述環(huán)境信息獲取模塊和所述版本信息獲取模塊相連的預(yù)編譯模塊,用于解析所述編譯環(huán)境信息和所述源碼版本信息,形成預(yù)編譯信息; 與所述預(yù)編譯模塊相連的寫入模塊,用于將所述預(yù)編譯信息寫入目標碼。
7.如權(quán)利要求6所述的可追溯目標碼生成器,其特征在于,所述環(huán)境信息獲取模塊包括: 第一提取單元,用于提取環(huán)境變量; 與所述第一提取單元相連的環(huán)境信息獲取單元,用于獲取所述環(huán)境變量包含的所述編譯環(huán)境信息。
8.如權(quán)利要求6所述的可追溯目標碼生成器,其特征在于,所述版本信息獲取模塊包括: 第二提取單元,用于提取版本信息變量; 與所述第二提取單元相連的版本信息獲取單元,用于獲取所述版本信息變量包含的所述源碼版本信息。
9.如權(quán)利要求6所述的可追溯目標碼生成器,其特征在于,所述預(yù)編譯模塊包括: 預(yù)編譯信息寫入單元,用于將所述環(huán)境變量和所述版本信息變量寫入預(yù)編譯文件; 與所述預(yù)編譯信息寫入單元相連的解析單元,用于對述預(yù)編譯文件解析,形成含有所述編譯環(huán)境信息和所述源碼版本信息的預(yù)編譯信息。
10.如權(quán)利要求6所述的可追溯目標碼生成器,其特征在于,所述寫入模塊包括: 鏈接參數(shù)單元,用于鏈接所述預(yù)編譯信息和所述目標碼。
【文檔編號】G06F21/57GK104331665SQ201410594660
【公開日】2015年2月4日 申請日期:2014年10月29日 優(yōu)先權(quán)日:2014年10月29日
【發(fā)明者】孫紹偉, 李明 申請人:中國農(nóng)業(yè)銀行股份有限公司