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

linux環(huán)境下快速轉(zhuǎn)換調(diào)用堆棧地址的系統(tǒng)及方法

文檔序號:6578428閱讀:147來源:國知局
專利名稱:linux環(huán)境下快速轉(zhuǎn)換調(diào)用堆棧地址的系統(tǒng)及方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算4幾技術(shù)領(lǐng)域,尤其涉及,具體地說,是涉及一種linux 環(huán)境下快速轉(zhuǎn)換調(diào)用堆棧地址的系統(tǒng)及方法。
背景技術(shù)
在Linux環(huán)境下, 一般查看函數(shù)運(yùn)行時堆棧的方法是使用GDB之類的 外部調(diào)試器。但是,有些時候為了分析程序的BUG,在需要的時候打印出 函數(shù)的調(diào)用堆棧信息是非常有用的。;見有^支術(shù)通常調(diào)用backtrace函凄t和backtrace—symbols函凄t,來獲耳又函 數(shù)調(diào)用堆棧信息,每一層堆棧信息的格式如下所示/應(yīng)用程序名[函數(shù)地址]。具體的例子如下/kernel
。由此可以看出,獲取的其實(shí)只是函數(shù)地址,并不是具體的函數(shù)名稱和源 代碼行數(shù)。想要獲取更詳細(xì)的信息,還必須執(zhí)行終端命令addr21ine來進(jìn)行 轉(zhuǎn)換addr21ine -f 0x804869c -e kernel > filel 。該命令把指定應(yīng)用程序(kernel)對應(yīng)函數(shù)地址的具體函數(shù)信息保存到 file 1文件中,保存信息的格式如下例所示os—nmlloc/root/src/pub/err.c:69。因此,現(xiàn)有技術(shù)在Linux環(huán)境下獲取函數(shù)調(diào)用堆棧的流程,如圖1所示, 主要包括如下幾個步驟步驟SI 10,調(diào)用backtrace函數(shù)和backtrace—symbols函數(shù),獲取函數(shù)調(diào) 用堆棧地址信息;步驟S120,從每一層的堆棧地址信息中解析出函數(shù)地址;步驟S130,調(diào)用system函數(shù)執(zhí)行addr21ine命令,把函數(shù)地址轉(zhuǎn)換成具 體的函數(shù)名稱和函數(shù)源代碼行數(shù),保存到一臨時文件中;步驟S140,讀取臨時文件,從中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)。由于步驟S130及步驟S140中,需要進(jìn)行臨時文件的輔助轉(zhuǎn)換(把函數(shù) 地址轉(zhuǎn)換成函數(shù)名及源代碼行數(shù)這一轉(zhuǎn)換),在實(shí)際應(yīng)用中不適合頻繁調(diào)用 該操作,否則會嚴(yán)重影響程序的執(zhí)行性能,因此有必要對現(xiàn)有的Linux環(huán)境 下獲取函數(shù)調(diào)用堆棧技術(shù)加以改進(jìn),以提高系統(tǒng)運(yùn)行效率。發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題,在于需要提供一種linux環(huán)境下快速轉(zhuǎn)換 調(diào)用堆棧地址的系統(tǒng)及方法,以提高linux環(huán)境下獲取函數(shù)調(diào)用堆棧的效率。為了解決上述技術(shù)問題,本發(fā)明提供了一種linux環(huán)境下快速轉(zhuǎn)換調(diào)用 堆棧地址的方法,包括建立 一 包含有若干公共線程的公共線程池;需要保存當(dāng)前堆棧信息時,獲取函數(shù)調(diào)用堆棧地址信息;從每一層的堆棧地址信息中解析出函數(shù)地址數(shù)組,將所述函數(shù)地址數(shù)組 與當(dāng)前堆棧相關(guān)信息組合成一個結(jié)構(gòu)體對象并緩存到一緩存隊列中;遍歷所述緩存隊列中的每個節(jié)點(diǎn),用所述公共線程池并行處理每個節(jié)點(diǎn) 的每層函數(shù)地址的轉(zhuǎn)換操作,得到轉(zhuǎn)換結(jié)果。優(yōu)選地,該方法進(jìn)一步包括將一個結(jié)構(gòu)體對象作為一個信息節(jié)點(diǎn),將所有信息節(jié)點(diǎn)組成一個查詢表;拋棄所述轉(zhuǎn)換操作的中間結(jié)果時,根據(jù)所述查詢表從所述緩存隊列中刪 除所述中間結(jié)果對應(yīng)的信息節(jié)點(diǎn)。優(yōu)選地,用所述公共線程池中的公共線程并行處理所述轉(zhuǎn)換才喿作,每個 公共線程得到一基本堆棧結(jié)果;對所有的基本堆棧結(jié)果進(jìn)行組合,得到所述轉(zhuǎn)換結(jié)果。優(yōu)選地,該方法進(jìn)一步包括轉(zhuǎn)換函數(shù)地址時,將函數(shù)地址轉(zhuǎn)換成函數(shù)名稱和函數(shù)源代碼行數(shù),保存 到一臨時文件中;讀取所述臨時文件,從所述臨時文件中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)。優(yōu)選地,該方法進(jìn)一步包括 建立一全局的函數(shù)地址映射表;從所述臨時文件中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)后,將所述函數(shù)名 稱及函數(shù)源代碼行數(shù)保存到所述函數(shù)地址映射表中;轉(zhuǎn)換函數(shù)地址時,查詢所述函lt地址映射表,查詢到相應(yīng)的匹配結(jié)果則 完成所述轉(zhuǎn)換操作,否則將函數(shù)地址轉(zhuǎn)換成函數(shù)名稱及函數(shù)源代碼行數(shù)。為了解決上述技術(shù)問題,本發(fā)明還提供了 一種linux環(huán)境下快速轉(zhuǎn)換調(diào) 用堆棧地址的系統(tǒng),包括建立模塊、獲取模塊、解析模塊、組合模塊、緩存 隊列及處理模塊,其中所述建立模塊,用于建立一包含有若干公共線程的公共線程池;所述獲取模塊,用于在需要保存當(dāng)前堆棧信息時,獲取函數(shù)調(diào)用堆棧地 址信息;所述解析模塊,用于從每一層的堆棧地址信息中解析出函數(shù)地址數(shù)組;所述組合模塊,用于將所述函數(shù)地址數(shù)組與當(dāng)前堆棧相關(guān)信息組合成一 個結(jié)構(gòu)體對象;所述緩存隊列,用于緩存所述組合模塊組合的所述結(jié)構(gòu)體對象; 所述處理模塊,用于遍歷所述緩存隊列中的每個節(jié)點(diǎn),用所述公共線程池并行處理每個節(jié)點(diǎn)的每層函數(shù)地址的轉(zhuǎn)換操作,得到轉(zhuǎn)換結(jié)果。
優(yōu)選地,該系統(tǒng)進(jìn)一步包括刪除沖莫塊
所述組合模塊,進(jìn)一步將一個結(jié)構(gòu)體對象作為一個信息節(jié)點(diǎn),然后將所 有信息節(jié)點(diǎn)組成一個查詢表;
所述刪除模塊,在需要拋棄所述轉(zhuǎn)換操作的中間結(jié)果時,根據(jù)所述查詢 表從所述緩存隊列中刪除所述中間結(jié)果對應(yīng)的信息節(jié)點(diǎn)。
優(yōu)選地,所述處理^^莫塊,用所述/^共線程池中的^^共線程并ff處理所述 轉(zhuǎn)換操作,每個公共線程得到一基本堆棧結(jié)果,然后對所有的基本堆棧結(jié)果 進(jìn)行組合,得到所述轉(zhuǎn)換結(jié)果。
優(yōu)選地,所述處理模塊,轉(zhuǎn)換函數(shù)地址時進(jìn)一步將函數(shù)地址轉(zhuǎn)換成函數(shù) 名稱和函數(shù)源代碼行數(shù),保存到一臨時文件中;讀取所述臨時文件,從所述 臨時文件中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)。
優(yōu)選地,所述處理模塊,進(jìn)一步建立一全局的函數(shù)地址映射表,從所述 臨時文件中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)后,將所述函數(shù)名稱及函數(shù)源 代碼行數(shù)保存到所述函數(shù)地址映射表中;在轉(zhuǎn)換函數(shù)地址時,查詢所述函數(shù)
地址映射表,查詢到相應(yīng)的匹配結(jié)果則完成所述轉(zhuǎn)換操作,否則將函數(shù)地址 轉(zhuǎn)換成函數(shù)名稱及函數(shù)源代碼行數(shù)。
與現(xiàn)有技術(shù)相比,本發(fā)明提高了 linux環(huán)境下獲取函數(shù)調(diào)用堆棧的效率, 在實(shí)際應(yīng)用中頻繁執(zhí)行此操作時,提高了系統(tǒng)性能。


圖1為現(xiàn)有技術(shù)在Linux環(huán)境下獲取函數(shù)調(diào)用堆棧實(shí)施例的流程示意
圖2為本發(fā)明快速轉(zhuǎn)換調(diào)用堆棧地址方法實(shí)施例的流程示意圖3為本發(fā)明4企測內(nèi)存泄露時轉(zhuǎn)換調(diào)用堆棧地址應(yīng)用實(shí)例的流程示意
圖4為本發(fā)明linux環(huán)境下快速轉(zhuǎn)換調(diào)用堆棧地址的系統(tǒng)實(shí)施例的組成 示意圖。
具體實(shí)施例方式
以下將結(jié)合附圖及實(shí)施例來詳細(xì)說明本發(fā)明的實(shí)施方式,借此對本發(fā)明 如何應(yīng)用技術(shù)手段來解決技術(shù)問題,并達(dá)成技術(shù)效果的實(shí)現(xiàn)過程能充分理解 并據(jù)以實(shí)施。
圖1所示現(xiàn)有技術(shù)調(diào)用堆棧實(shí)施例的步驟S130及步驟S140中,調(diào)用
圖2是本發(fā)明快速轉(zhuǎn)換調(diào)用堆棧地址方法實(shí)施例的流程示意圖,如圖2 所示,該實(shí)施例主要包括如下步驟
步驟S210,建立一公共線程池,該公共線程池包含有若干用于后續(xù)轉(zhuǎn) 換操作的公共線程;
步驟S220,當(dāng)需要保存當(dāng)前堆棧信息時,調(diào)用backtrace函凄t和 backtrace—symbols函數(shù),獲取函數(shù)調(diào)用堆棧地址信息;
步驟S230,從每一層的堆棧地址信息中解析出函數(shù)地址數(shù)組,將該函 數(shù)地址數(shù)組及與當(dāng)前堆棧相關(guān)信息組合成一個結(jié)構(gòu)體對象;
步驟S240,將該結(jié)構(gòu)體對象緩存到一個緩存隊列中,而不是立即進(jìn)行 后續(xù)的轉(zhuǎn)換操作,只有需要輸出給用戶時,才進(jìn)行轉(zhuǎn)換;在緩存隊列中,將 每一個結(jié)構(gòu)體對象作為一個信息節(jié)點(diǎn),所有信息節(jié)點(diǎn)組成一個查詢表;
在實(shí)際應(yīng)用時,可以拋棄部分中間結(jié)果,即臨時保存的一些基本堆棧信 息,比如函數(shù)地址數(shù)組及當(dāng)前堆棧相關(guān)信息組成的結(jié)構(gòu)體對象,這些中間結(jié) 果并不需要輸出,且不會應(yīng)用于后續(xù)操作,這樣做節(jié)約部分中間結(jié)果轉(zhuǎn)換所 帶來的時間開銷;
當(dāng)需要拋棄一些中間結(jié)果時,用map在緩存隊列的查詢表中進(jìn)行快速 檢索,從而刪除對應(yīng)于緩存隊列中不再需要結(jié)構(gòu)體對象的信息節(jié)點(diǎn);
步驟S250,需要輸出詳細(xì)的堆棧結(jié)果時,遍歷緩存隊列中的每一個節(jié) 點(diǎn),用該/>共線程池中的7>共線程來并行處理當(dāng)前節(jié)點(diǎn)的每一層函凄丈地址的 轉(zhuǎn)換操作,每個公共線程得到一基本堆棧結(jié)果;
步驟S260,對所有公共線程的基本堆棧結(jié)果進(jìn)行組合,獲得最終的轉(zhuǎn)換結(jié)果,然后輸出該轉(zhuǎn)換結(jié)果。
其中,上述步驟S250,該公共線程池中的公共線程并行處理當(dāng)前節(jié)點(diǎn)
每一層函數(shù)地址的轉(zhuǎn)換操作,主要包括如下步驟
步驟S251,在轉(zhuǎn)換當(dāng)前函數(shù)地址時,調(diào)用system函數(shù)執(zhí)行addr21ine命 令,把函數(shù)地址轉(zhuǎn)換成具體的函數(shù)名稱和函數(shù)源代碼行數(shù),保存到一臨時文 件中;
步驟S252,讀取該臨時文件,從該臨時文件中解析出函數(shù)名稱和函數(shù) 源代碼行數(shù),并將函數(shù)名稱及函數(shù)源代碼行數(shù)保存到函數(shù)地址映射表中。
步驟S253,返回當(dāng)前線程的執(zhí)行結(jié)果。
本發(fā)明還可以通過建立函數(shù)地址映射表,可以節(jié)約頻繁轉(zhuǎn)換所帶來的時 間開銷。比如在建立該公共線程池之后,使用map建立一全局的函數(shù)地址 映射表;在從臨時文件中解析出函數(shù)名稱及函數(shù)源代碼行數(shù)之后,將該函數(shù) 名稱及函數(shù)源代碼行數(shù)保存到該函數(shù)地址映射表中;后續(xù)對于相同的轉(zhuǎn)換操 作,在輸出堆棧結(jié)果時,即可首先查詢該函數(shù)地址映射表,如果查詢到相匹 配的結(jié)果則直接輸出該映射表所保存的信息,否則再進(jìn)行轉(zhuǎn)換。
以下通過監(jiān)測內(nèi)存泄露為例來iJt明本發(fā)明的詳細(xì)過程。圖3為本發(fā)明抬r 測內(nèi)存泄露時轉(zhuǎn)換調(diào)用堆棧地址應(yīng)用實(shí)例的流程示意圖。如圖3所示,該應(yīng) 用實(shí)例主要包括如下步驟
步驟S310,建立一公共線程池,包含50個用于后續(xù)轉(zhuǎn)換操作的公共線
程;
步驟S320,使用map建立一全局的函數(shù)地址映射表,可以在該映射表 中查找指定函數(shù)地址的轉(zhuǎn)換結(jié)果;
步驟S330, —上層;^莫塊調(diào)用new或malloc等#:作來分配內(nèi)存空間,內(nèi) 存泄露監(jiān)測模塊捕獲到該上層某模塊分配內(nèi)存的操作時,調(diào)用backtrace函 數(shù)和backtrace—symbols函數(shù)獲取該上層模塊的函數(shù)調(diào)用堆棧;
步驟S340,將基本堆棧結(jié)果(即函數(shù)地址凄t組)、內(nèi)存分配時分配的 內(nèi)存指針以及分配的空間大小組合成一結(jié)構(gòu)體對象;步驟S350,將該結(jié)構(gòu)體對象保存到分配信息隊列中,作為后續(xù)統(tǒng)計的 依據(jù);
步驟S360,上層模塊調(diào)用delete或free函數(shù)釋放內(nèi)存時,內(nèi)存泄露監(jiān) 測模塊捕獲到上層模塊釋放內(nèi)存的操作,于是從分配信息隊列中將對應(yīng)指針 的節(jié)點(diǎn)刪除;
步驟S370,用戶輸入命令,要求輸出當(dāng)前未被釋放內(nèi)存的相關(guān)信息, 則內(nèi)存泄露監(jiān)測模塊遍歷分配信息隊列的每個節(jié)點(diǎn),獲取每個節(jié)點(diǎn)的基本堆 棧結(jié)果(即一個函數(shù)地址數(shù)組),并使用20個^^共線程并行地對20層堆棧 地址進(jìn)行轉(zhuǎn)換,每個線程的處理步驟如步驟S371至步驟S374所述;
步驟S371,轉(zhuǎn)換當(dāng)前節(jié)點(diǎn)時,先查找函數(shù)地址映射表,如果找到相應(yīng) 的匹配結(jié)果,則轉(zhuǎn)步驟S374,如果沒有找到相應(yīng)的匹配結(jié)果,則轉(zhuǎn)步驟S372;
步驟S372,調(diào)用system函數(shù)執(zhí)行addr21ine命令,把函數(shù)地址轉(zhuǎn)換成具 體的函數(shù)名稱和源代碼行數(shù),保存到臨時文件file—n中;
步驟S373,讀取臨時文件file一n,從中解析出函數(shù)名稱和源代碼行數(shù), 并將結(jié)果保存到函數(shù)地址映射表中;
步驟S374,返回轉(zhuǎn)換后的結(jié)果,當(dāng)前線程處理結(jié)束。
步驟S380,等待所有20個公共線程都處理結(jié)束后,將當(dāng)前節(jié)點(diǎn)標(biāo)記為 已轉(zhuǎn)換,避免下次輸出時重復(fù)操作,并返回所有公共線程的組合結(jié)果;
步驟S3卯,內(nèi)存泄露監(jiān)測模塊將當(dāng)前堆棧信息逐層輸出到屏幕或文件, 供用戶查看該內(nèi)存指針是如何被分配的。
圖4為本發(fā)明linux環(huán)境下快速轉(zhuǎn)換調(diào)用堆棧地址的系統(tǒng)實(shí)施例的組成 示意圖。如圖4所示,該系統(tǒng)實(shí)施例主要包括建立模塊410、獲取模塊420、 解析模塊430、組合模塊440、緩存隊列450及處理模塊460,其中
建立模塊410,用于建立一包含有若干公共線程的公共線程池;
獲取模塊420,用于在需要保存當(dāng)前堆棧信息時,獲取函數(shù)調(diào)用堆棧地 址信息;
解析模塊430,用于從每一層的堆棧地址信息中解析出函數(shù)地址數(shù)組;組合模塊440,用于將函數(shù)地址數(shù)組與當(dāng)前堆棧相關(guān)信息組合成一個結(jié) 構(gòu)體對象;
緩存隊列450,用于緩存組合模塊440組合的結(jié)構(gòu)體對象;
處理模塊460,用于遍歷緩存隊列450中的每個節(jié)點(diǎn),用公共線程池并 行處理每個節(jié)點(diǎn)的每層函數(shù)地址的轉(zhuǎn)換操作,得到轉(zhuǎn)換結(jié)果。
如圖4所示,該系統(tǒng)還可以進(jìn)一步包括刪除模塊470,在組合才莫塊440 將一個結(jié)構(gòu)體對象作為一個信息節(jié)點(diǎn)并將所有信息節(jié)點(diǎn)組成一個查詢表后, 刪除模塊470在需要拋棄轉(zhuǎn)換操作的中間結(jié)果時,根據(jù)查詢表從緩存隊列 450中刪除中間結(jié)果對應(yīng)的信息節(jié)點(diǎn)。
上述處理模塊460,用公共線程池中的公共線程并行處理轉(zhuǎn)換操作,每 個公共線程得到一基本堆棧結(jié)杲,然后對所有的基本堆棧結(jié)果進(jìn)行組合,得 到轉(zhuǎn)換結(jié)果。
上述處理模塊460,轉(zhuǎn)換函數(shù)地址時可以進(jìn)一步將函數(shù)地址轉(zhuǎn)換成函數(shù) 名稱和函數(shù)源代碼行數(shù),保存到一臨時文件中;讀取臨時文件,從臨時文件 中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)。
上述處理模塊460,可以進(jìn)一步建立一全局的函數(shù)地址映射表,從臨時 文件中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)后,將函數(shù)名稱及函數(shù)源代碼行數(shù) 保存到函數(shù)地址映射表中;在轉(zhuǎn)換函數(shù)地址時,查詢函數(shù)地址映射表,查詢 到相應(yīng)的匹配結(jié)果則完成轉(zhuǎn)換操作,否則將函數(shù)地址轉(zhuǎn)換成函數(shù)名稱及函數(shù) 源代碼行數(shù)。
本發(fā)明相對于現(xiàn)有技術(shù)的改進(jìn),主要體現(xiàn)在如下幾個方面
(1) 延遲處理;將堆棧信息的轉(zhuǎn)換操作盡量延遲,過濾掉一些臨時信 息轉(zhuǎn)換所帶來的時間開銷,節(jié)約了時間成本;
(2) 并行處理;采用多線程方式同時處理堆棧信息的每一層函數(shù)地址, 提高了轉(zhuǎn)換速度,提高了處理效率;
(3) 使用函數(shù)地址映射表,以空間換取時間;由于函數(shù)地址映射表的 輔助,在多次轉(zhuǎn)換同一函數(shù)地址的情況下,除了第一次需要使用現(xiàn)有技術(shù)的 方案進(jìn)行轉(zhuǎn)換外,后續(xù)的操作都在內(nèi)存中直接處理,速度更快進(jìn)一步提高了處理效率。
因此,本發(fā)明有效提高了系統(tǒng)的執(zhí)行效率,尤其對調(diào)用頻率較高的應(yīng)用, 改進(jìn)前后的性能對比非常明顯。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不 局限于此,任何熟悉該技術(shù)的人員在本發(fā)明所揭露的技術(shù)范圍內(nèi),可輕易想 到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù) 范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1、一種linux環(huán)境下快速轉(zhuǎn)換調(diào)用堆棧地址的方法,其特征在于,包括建立一包含有若干公共線程的公共線程池;需要保存當(dāng)前堆棧信息時,獲取函數(shù)調(diào)用堆棧地址信息;從每一層的堆棧地址信息中解析出函數(shù)地址數(shù)組,將所述函數(shù)地址數(shù)組與當(dāng)前堆棧相關(guān)信息組合成一個結(jié)構(gòu)體對象并緩存到一緩存隊列中;遍歷所述緩存隊列中的每個節(jié)點(diǎn),用所述公共線程池并行處理每個節(jié)點(diǎn)的每層函數(shù)地址的轉(zhuǎn)換操作,得到轉(zhuǎn)換結(jié)果。
2、 如權(quán)利要求l所述的方法,其特征在于,該方法進(jìn)一步包括 將一個結(jié)構(gòu)體對象作為一個信息節(jié)點(diǎn),將所有信息節(jié)點(diǎn)組成一個查詢表;拋棄所述轉(zhuǎn)換操作的中間結(jié)果時,根據(jù)所述查詢表從所述緩存隊列中刪 除所述中間結(jié)果對應(yīng)的信息節(jié)點(diǎn)。
3、 如權(quán)利要求l所述的方法,其特征在于用所述公共線程池中的公共線程并行處理所述轉(zhuǎn)換操作,每個公共線程 得到一基本堆棧結(jié)果;對所有的基本堆棧結(jié)果進(jìn)行組合,得到所述轉(zhuǎn)換結(jié)果。
4、 如權(quán)利要求3所述的方法,其特征在于,該方法進(jìn)一步包括轉(zhuǎn)換函數(shù)地址時,將函數(shù)地址轉(zhuǎn)換成函數(shù)名稱和函數(shù)源代碼行數(shù),保存 到一臨時文件中;讀取所述臨時文件,從所述臨時文件中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)。
5、 如權(quán)利要求4所述的方法,其特征在于,該方法進(jìn)一步包括 建立一全局的函數(shù)地址映射表;從所述臨時文件中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)后,將所述函數(shù)名稱及函數(shù)源代碼行數(shù)保存到所述函數(shù)地址映射表中;轉(zhuǎn)換函數(shù)地址時,查詢所述函數(shù)地址映射表,查詢到相應(yīng)的匹配結(jié)果則 完成所述轉(zhuǎn)換操作,否則將函數(shù)地址轉(zhuǎn)換成函數(shù)名稱及函數(shù)源代碼行數(shù)。
6、 一種linux環(huán)境下快速轉(zhuǎn)換調(diào)用堆棧地址的系統(tǒng),其特征在于,包括 建立模塊、獲取模塊、解析模塊、組合模塊、緩存隊列及處理模塊,其中所述建立模塊,用于建立一包含有若干公共線程的公共線程池;所述獲取模塊,用于在需要保存當(dāng)前堆棧信息時,獲取函數(shù)調(diào)用堆棧地 址信息;所述解析模塊,用于從每一層的堆棧地址信息中解析出函數(shù)地址數(shù)組;所述組合模塊,用于將所述函數(shù)地址數(shù)組與當(dāng)前堆棧相關(guān)信息組合成一 個結(jié)構(gòu)體對象;所述緩存隊列,用于緩存所述組合模塊組合的所述結(jié)構(gòu)體對象;所述處理模塊,用于遍歷所述緩存隊列中的每個節(jié)點(diǎn),用所述公共線程 池并行處理每個節(jié)點(diǎn)的每層函數(shù)地址的轉(zhuǎn)換操作,得到轉(zhuǎn)換結(jié)果。
7、 如權(quán)利要求6所述的系統(tǒng),其特征在于,該系統(tǒng)進(jìn)一步包括刪除模塊所述組合模塊,進(jìn)一步將一個結(jié)構(gòu)體對象作為一個信息節(jié)點(diǎn),然后將所 有信息節(jié)點(diǎn)組成一個查詢表;所述刪除模塊,在需要拋棄所述轉(zhuǎn)換操作的中間結(jié)果時,根據(jù)所述查詢 表從所述緩存隊列中刪除所述中間結(jié)果對應(yīng)的信息節(jié)點(diǎn)。
8、 如權(quán)利要求6所述的系統(tǒng),其特征在于所述處理模塊,用所述公共線程池中的公共線程并行處理所述轉(zhuǎn)換操 作,每個公共線程得到一基本堆棧結(jié)果,然后對所有的基本堆棧結(jié)果進(jìn)行組 合,得到所述轉(zhuǎn)換結(jié)果。
9、 如權(quán)利要求8所述的系統(tǒng),其特征在于所述處理模塊,轉(zhuǎn)換函數(shù)地址時進(jìn)一步將函數(shù)地址轉(zhuǎn)換成函數(shù)名稱和函數(shù)源代碼行數(shù),保存到一臨時文件中;讀取所述臨時文件,從所述臨時文件 中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)。
10、如權(quán)利要求9所述的系統(tǒng),其特征在于所述處理模塊,進(jìn)一步建立一全局的函數(shù)地址映射表,從所述臨時文件 中解析出函數(shù)名稱和函數(shù)源代碼行數(shù)后,將所述函數(shù)名稱及函數(shù)源代碼行數(shù) 保存到所述函數(shù)地址映射表中;在轉(zhuǎn)換函數(shù)地址時,查詢所述函數(shù)地址映射 表,查詢到相應(yīng)的匹配結(jié)果則完成所述轉(zhuǎn)換操作,否則將函數(shù)地址轉(zhuǎn)換成函 數(shù)名稱及函數(shù)源代碼行數(shù)。
全文摘要
本發(fā)明公開了一種linux環(huán)境下快速轉(zhuǎn)換調(diào)用堆棧地址的系統(tǒng)及方法,提高了linux環(huán)境下獲取函數(shù)調(diào)用堆棧的效率。其中該方法包括建立一包含有若干公共線程的公共線程池;需要保存當(dāng)前堆棧信息時,獲取函數(shù)調(diào)用堆棧地址信息;從每一層的堆棧地址信息中解析出函數(shù)地址數(shù)組,將函數(shù)地址數(shù)組與當(dāng)前堆棧相關(guān)信息組合成一個結(jié)構(gòu)體對象并緩存到一緩存隊列中;遍歷緩存隊列中的每個節(jié)點(diǎn),用公共線程池并行處理每個節(jié)點(diǎn)的每層函數(shù)地址的轉(zhuǎn)換操作,得到轉(zhuǎn)換結(jié)果。與現(xiàn)有技術(shù)相比,本發(fā)明提高了linux環(huán)境下獲取函數(shù)調(diào)用堆棧的效率,在實(shí)際應(yīng)用中頻繁執(zhí)行此操作時,提高了系統(tǒng)性能。
文檔編號G06F9/46GK101615136SQ200910142259
公開日2009年12月30日 申請日期2009年6月26日 優(yōu)先權(quán)日2009年6月26日
發(fā)明者濤 龍 申請人:中興通訊股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
赞皇县| 土默特右旗| 宜兰县| 怀仁县| 黄平县| 松潘县| 郑州市| 琼海市| 夏津县| 淮南市| 巴林左旗| 洛扎县| 哈尔滨市| 宝兴县| 陇西县| 石台县| 寻甸| 大石桥市| 云和县| 鹿泉市| 噶尔县| 耒阳市| 乡城县| 宝清县| 山东| 理塘县| 迁西县| 田东县| 新龙县| 琼中| 建德市| 沂水县| 大庆市| 建平县| 益阳市| 莱西市| 施甸县| 会东县| 罗山县| 班戈县| 中阳县|