日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

一種多線程分析與運(yùn)行可視化方法與流程

文檔序號(hào):11250766閱讀:1380來(lái)源:國(guó)知局
一種多線程分析與運(yùn)行可視化方法與流程

本發(fā)明涉及數(shù)據(jù)分析技術(shù)領(lǐng)域,尤其涉及一種多線程分析與運(yùn)行可視化方法。



背景技術(shù):

目前很多項(xiàng)目,源代碼行數(shù)較多,且為多線程并行執(zhí)行,在此基礎(chǔ)上需要對(duì)源代碼進(jìn)行改動(dòng)的話,就需要查找所需函數(shù)進(jìn)行針對(duì)性的修改,但在源代碼行數(shù)較多的情況下查找某一函數(shù)或分析其代碼構(gòu)架等,都不是件容易的事,主要是通過(guò)人為查閱與分析實(shí)現(xiàn)的,為了幫助工程師對(duì)源代碼進(jìn)行分析,引入一些工具(如gnu編譯器工具鏈)在運(yùn)行源代碼時(shí)獲取運(yùn)行時(shí)堆棧記錄,從運(yùn)行日志中分析并查找出所需函數(shù),這在一定程度上降低了程序分析的難度。

現(xiàn)有的用于運(yùn)行時(shí)堆棧記錄分析的工具,主要是涉及對(duì)單線程程序分析,無(wú)法實(shí)現(xiàn)對(duì)多線程程序的分析,且只適用于較少量代碼行的分析。現(xiàn)有的對(duì)單線程程序的分析方法,目前常見(jiàn)的是利用開(kāi)源軟件graphviz實(shí)現(xiàn)函數(shù)調(diào)用可視化,提供給工程師一個(gè)直觀的函數(shù)調(diào)用關(guān)系圖,具體為:先通過(guò)一編譯器工具鏈(如gnu編譯器工具鏈,可通過(guò)一參數(shù)finstrument-function對(duì)源代碼所有函數(shù)調(diào)用形成一個(gè)代理入口)獲取源程序運(yùn)行日志,運(yùn)行日志包括源程序各函數(shù)跟蹤數(shù)據(jù)(函數(shù)地址和運(yùn)行時(shí)堆棧),再利用一定制的中間代碼(如pvtrace工具)對(duì)函數(shù)跟蹤數(shù)據(jù)進(jìn)行處理,并生成矩陣格式,再通過(guò)一地址映射工具(如addr2line工具)將獲取到的函數(shù)地址映射成函數(shù)名以便用戶閱讀,最后利用開(kāi)源的graphviz工具對(duì)整個(gè)源程序的函數(shù)調(diào)用關(guān)系進(jìn)行圖形繪制。但實(shí)際運(yùn)用中,這種方法對(duì)日志分析的貢獻(xiàn)有限,當(dāng)涉及多線程程序或超過(guò)二十萬(wàn)行以上的大型項(xiàng)目時(shí),其數(shù)據(jù)量太大且較為復(fù)雜,無(wú)法提取有效數(shù)據(jù)進(jìn)行突出,工程師分析起來(lái)十分費(fèi)勁。有鑒于此,開(kāi)發(fā)一種多線程分析與運(yùn)行可視化方法就顯得尤為重要。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明要解決的技術(shù)問(wèn)題,在于提供一種多線程分析與運(yùn)行可視化方法,實(shí)現(xiàn)多線程運(yùn)行數(shù)據(jù)的篩選分析與可視化展示,為工程師提供有效的源程序分析依據(jù),提高軟件開(kāi)發(fā)效率。

本發(fā)明是這樣實(shí)現(xiàn)的:一種多線程分析與運(yùn)行可視化方法,包括如下步驟:

步驟1、運(yùn)行源程序,采集所述源程序的線程id和運(yùn)行時(shí)堆棧;

步驟2、根據(jù)所述線程id對(duì)采集到的運(yùn)行時(shí)堆棧進(jìn)行分離,使得每一線程id對(duì)應(yīng)一個(gè)子運(yùn)行時(shí)堆棧;

步驟3、統(tǒng)計(jì)每一所述子運(yùn)行時(shí)堆棧中各函數(shù)的調(diào)用數(shù)據(jù),所述調(diào)用數(shù)據(jù)包括歸屬模塊、調(diào)用次數(shù)、調(diào)用深度和調(diào)用跨度;

步驟4、根據(jù)所述歸屬模塊對(duì)每一所述子運(yùn)行時(shí)堆棧中的基礎(chǔ)類函數(shù)進(jìn)行識(shí)別并過(guò)濾;

步驟5、根據(jù)預(yù)先設(shè)定的調(diào)用次數(shù)值、調(diào)用深度值和調(diào)用跨度值對(duì)每一所述子運(yùn)行時(shí)堆棧做進(jìn)一步過(guò)濾;

步驟6、對(duì)每一所述子運(yùn)行時(shí)堆棧進(jìn)行可視化展示,得到每一線程對(duì)應(yīng)的函數(shù)調(diào)用關(guān)系圖,供工程師分析查閱。

進(jìn)一步的,所述線程id通過(guò)一外部程序直接調(diào)用操作系統(tǒng)線程api獲得。

進(jìn)一步的,所述運(yùn)行時(shí)堆棧是通過(guò)在編譯器添加標(biāo)志,之后通過(guò)代理函數(shù)獲得的。

進(jìn)一步的,所述歸屬模塊包括內(nèi)存分配模塊、文件操作模塊和鎖模塊。

進(jìn)一步的,所述步驟6具體為:通過(guò)提取每一子運(yùn)行時(shí)堆棧中函數(shù)對(duì)應(yīng)的文件名、方法名、目錄、調(diào)用次數(shù)和函數(shù)調(diào)用順序,利用開(kāi)源graphviz軟件繪制需要的函數(shù)調(diào)用分析圖。

進(jìn)一步的,所述函數(shù)調(diào)用分析圖中通過(guò)顏色對(duì)重要函數(shù)節(jié)點(diǎn)進(jìn)行標(biāo)識(shí),所述重要函數(shù)節(jié)點(diǎn)為跨度大于一閾值的函數(shù)節(jié)點(diǎn)。

本發(fā)明具有如下優(yōu)點(diǎn):通過(guò)對(duì)多線程運(yùn)行時(shí)堆棧進(jìn)行分離,再根據(jù)用戶需要設(shè)置過(guò)濾參數(shù)(歸屬模塊、調(diào)用次數(shù)值、調(diào)用深度值和調(diào)用跨度值)對(duì)一些不需要顯示的函數(shù)進(jìn)行篩選過(guò)濾,得到過(guò)濾后的各個(gè)子運(yùn)行時(shí)堆棧,再對(duì)精簡(jiǎn)后的運(yùn)行時(shí)堆棧進(jìn)行可視化展現(xiàn),從而提供給用戶清晰簡(jiǎn)潔的分析圖,便于用戶查閱,本發(fā)明能實(shí)現(xiàn)對(duì)程序運(yùn)行路徑和熱點(diǎn)的快速定位,有效提升大型軟件項(xiàng)目的研發(fā)效率,縮短軟件工程工期。

附圖說(shuō)明

下面參照附圖結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步的說(shuō)明。

圖1為本發(fā)明一種多線程分析與運(yùn)行可視化方法執(zhí)行流程圖。

圖2為本發(fā)明一實(shí)施例的函數(shù)調(diào)用分析圖。

具體實(shí)施方式

如圖1所示,一種多線程分析與運(yùn)行可視化方法,包括如下步驟:

步驟1、運(yùn)行源程序,采集所述源程序的線程id和運(yùn)行時(shí)堆棧,所述線程id通過(guò)一外部程序直接調(diào)用操作系統(tǒng)線程api獲得,所述運(yùn)行時(shí)堆棧是通過(guò)在編譯器(如gnu編譯器)添加標(biāo)志,之后通過(guò)代理函數(shù)獲得的;

步驟2、根據(jù)所述線程id對(duì)采集到的運(yùn)行時(shí)堆棧進(jìn)行分離,使得每一線程id對(duì)應(yīng)一個(gè)子運(yùn)行時(shí)堆棧;

步驟3、統(tǒng)計(jì)每一所述子運(yùn)行時(shí)堆棧中各函數(shù)的調(diào)用數(shù)據(jù),所述調(diào)用數(shù)據(jù)包括歸屬模塊、調(diào)用次數(shù)、調(diào)用深度和調(diào)用跨度,所述歸屬模塊包括內(nèi)存分配模塊、文件操作模塊和鎖模塊;

步驟4、根據(jù)所述歸屬模塊對(duì)每一所述子運(yùn)行時(shí)堆棧中的基礎(chǔ)類函數(shù)進(jìn)行識(shí)別并過(guò)濾;

步驟5、根據(jù)預(yù)先設(shè)定的調(diào)用次數(shù)值、調(diào)用深度值和調(diào)用跨度值對(duì)每一所述子運(yùn)行時(shí)堆棧做進(jìn)一步過(guò)濾;

步驟6、對(duì)每一所述子運(yùn)行時(shí)堆棧進(jìn)行可視化展示,得到每一線程對(duì)應(yīng)的函數(shù)調(diào)用關(guān)系圖,供工程師分析查閱,所述步驟6具體為:通過(guò)提取每一子運(yùn)行時(shí)堆棧中函數(shù)對(duì)應(yīng)的文件名、方法名、目錄、調(diào)用次數(shù)和函數(shù)調(diào)用順序,利用開(kāi)源graphviz軟件繪制需要的函數(shù)調(diào)用分析圖,所述函數(shù)調(diào)用分析圖中通過(guò)顏色對(duì)重要函數(shù)節(jié)點(diǎn)進(jìn)行標(biāo)識(shí),所述重要函數(shù)節(jié)點(diǎn)為跨度(即所包含的一級(jí)子函數(shù)個(gè)數(shù))大于一閾值的函數(shù)節(jié)點(diǎn)。

下面結(jié)合一具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步說(shuō)明:

采用本發(fā)明一種多線程分析與運(yùn)行可視化方法,對(duì)一包括三個(gè)線程相互切換的源程序進(jìn)行分析,具體步驟如下:

步驟1、運(yùn)行源程序,通過(guò)在編譯器(如gnu編譯器)添加標(biāo)志,之后通過(guò)代理獲得運(yùn)行時(shí)堆棧,并通過(guò)外部程序直接調(diào)用操作系統(tǒng)線程api獲得源程序的線程id,例如本實(shí)施例中,源程序共有4個(gè)線程,即獲得4個(gè)線程id,分別為1個(gè)主線程id(000)和3個(gè)子線程id(001、002和003);

步驟2、根據(jù)所述線程id對(duì)采集到的運(yùn)行時(shí)堆棧進(jìn)行分離,使得每一線程id對(duì)應(yīng)一個(gè)子運(yùn)行時(shí)堆棧,即該源程序的運(yùn)行時(shí)堆??煞蛛x成4個(gè)子運(yùn)行時(shí)堆棧;

步驟3、統(tǒng)計(jì)每一所述子運(yùn)行時(shí)堆棧中各函數(shù)的調(diào)用數(shù)據(jù),所述調(diào)用數(shù)據(jù)包括歸屬模塊、調(diào)用次數(shù)、調(diào)用深度和調(diào)用跨度,所述歸屬模塊主要包括內(nèi)存分配模塊、文件操作模塊和鎖模塊等,頻繁被調(diào)用的系統(tǒng)基礎(chǔ)模塊;

步驟4、根據(jù)所述歸屬模塊對(duì)每一所述子運(yùn)行時(shí)堆棧中的基礎(chǔ)類函數(shù)進(jìn)行識(shí)別并過(guò)濾,即識(shí)別并過(guò)濾掉內(nèi)存分配模塊、文件操作模塊和鎖模塊等,頻繁被調(diào)用的系統(tǒng)基礎(chǔ)模塊;

步驟5、根據(jù)預(yù)先設(shè)定的調(diào)用次數(shù)值、調(diào)用深度值和調(diào)用跨度值對(duì)每所述子運(yùn)行時(shí)堆棧做進(jìn)一步過(guò)濾;

步驟6、通過(guò)提取經(jīng)上述兩次過(guò)濾后的每一子運(yùn)行時(shí)堆棧中函數(shù)對(duì)應(yīng)的文件名、方法名、目錄、調(diào)用次數(shù)和函數(shù)調(diào)用順序,利用開(kāi)源graphviz軟件繪制需要的函數(shù)調(diào)用分析圖,例如,將過(guò)濾用的調(diào)用次數(shù)值取100,調(diào)用深度值取4,調(diào)用跨度值取0,則得到如圖2所示的四個(gè)線程的函數(shù)調(diào)用分析圖。在該函數(shù)調(diào)用分析圖中,函數(shù)節(jié)點(diǎn)用文件名、方法名和目錄表示,兩函數(shù)節(jié)點(diǎn)之間的調(diào)用關(guān)系用帶箭頭的線段表示,并通過(guò)在線段上標(biāo)數(shù)字來(lái)直觀識(shí)別調(diào)用順序,以便用戶快速查找定位,其中,所述函數(shù)調(diào)用分析圖還對(duì)重要函數(shù)節(jié)點(diǎn)進(jìn)行標(biāo)識(shí),所述重要函數(shù)節(jié)點(diǎn)為跨度(即所包含的一級(jí)子函數(shù)個(gè)數(shù))大于一閾值的函數(shù)節(jié)點(diǎn)(一般取6)。

上述歸屬模塊、調(diào)用次數(shù)、調(diào)用深度和調(diào)用跨度以及步驟6中所述的閾值均可以根據(jù)用戶需要進(jìn)行調(diào)整,從而選擇性的隱藏一些不需要顯示或冗余的函數(shù),以便提供給用戶清晰、重點(diǎn)突出的函數(shù)調(diào)用分析圖,提高工程師后期函數(shù)的定位查詢與分析效率。

本發(fā)明通過(guò)采集多線程運(yùn)行時(shí)堆棧,按線程id對(duì)運(yùn)行時(shí)堆棧進(jìn)行分離,得到多個(gè)子運(yùn)行時(shí)堆棧,再根據(jù)用戶需要設(shè)置過(guò)濾參數(shù)(歸屬模塊、調(diào)用次數(shù)值、調(diào)用深度值和調(diào)用跨度值)對(duì)一些不需要顯示的函數(shù)進(jìn)行篩選過(guò)濾,得到過(guò)濾后的各個(gè)子運(yùn)行時(shí)堆棧,再分別過(guò)濾后的對(duì)各個(gè)線程進(jìn)行可視化展現(xiàn),提供給用戶清晰簡(jiǎn)潔的分析圖,以方便用戶閱讀,本發(fā)明可實(shí)現(xiàn)對(duì)程序運(yùn)行路徑和熱點(diǎn)的快速定位,有效提升大型軟件項(xiàng)目的研發(fā)效率,縮短軟件工程工期。

雖然以上描述了本發(fā)明的具體實(shí)施方式,但是熟悉本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,我們所描述的具體的實(shí)施例只是說(shuō)明性的,而不是用于對(duì)本發(fā)明的范圍的限定,熟悉本領(lǐng)域的技術(shù)人員在依照本發(fā)明的精神所作的等效的修飾以及變化,都應(yīng)當(dāng)涵蓋在本發(fā)明的權(quán)利要求所保護(hù)的范圍內(nèi)。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1