一種進(jìn)程間通信的統(tǒng)計調(diào)試方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種進(jìn)程間通信的統(tǒng)計調(diào)試方法及系統(tǒng),該方法包括:在網(wǎng)絡(luò)設(shè)備間的進(jìn)程通信系統(tǒng)中封裝套接字發(fā)送函數(shù),以使進(jìn)程通信系統(tǒng)中各個模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信;采用封裝后的套接字發(fā)送函數(shù)對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,得到每一模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù);若模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)大于預(yù)設(shè)閾值,確定該模塊函數(shù)為問題模塊函數(shù)。本發(fā)明實施例能夠準(zhǔn)確地定位出頻繁進(jìn)行進(jìn)程通信的模塊函數(shù),進(jìn)而避免模塊函數(shù)頻繁進(jìn)行不必要的進(jìn)程通信,而導(dǎo)致系統(tǒng)性能下降或系統(tǒng)卡頓的問題。
【專利說明】
一種進(jìn)程間通信的統(tǒng)計調(diào)試方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,尤其涉及一種進(jìn)程間通信的統(tǒng)計調(diào)試方法及系統(tǒng)。
【背景技術(shù)】
[0002]socket,即套接字是一種通信機(jī)制,憑借這種機(jī)制,客戶/服務(wù)器(即要進(jìn)行通信的進(jìn)程)系統(tǒng)的開發(fā)工作既可以在本地單機(jī)上進(jìn)行,也可以跨網(wǎng)絡(luò)進(jìn)行。也就是說它可以讓不在同一臺計算機(jī)但通過網(wǎng)絡(luò)連接計算機(jī)上的進(jìn)程進(jìn)行通信。也因為這樣,套接字明確地將客戶端和服務(wù)器區(qū)分開來。
[0003]目前,socket的實現(xiàn)具體為:服務(wù)器應(yīng)用程序用系統(tǒng)調(diào)用socket來創(chuàng)建一個套接字,它是系統(tǒng)分配給該服務(wù)器進(jìn)程的類似文件描述符的資源,它不能與其他的進(jìn)程共享。接下來,服務(wù)器進(jìn)程會給套接字起個名字,我們使用系統(tǒng)調(diào)用bind來給套接字命名。然后服務(wù)器進(jìn)程就開始等待客戶連接到這個套接字。然后,系統(tǒng)調(diào)用listen來創(chuàng)建一個隊列并將其用于存放來自客戶的進(jìn)入連接。最后,服務(wù)器通過系統(tǒng)調(diào)用accept來接受客戶的連接。它會創(chuàng)建一個與原有的命名套接不同的新套接字,這個套接字只用于與這個特定客戶端進(jìn)行通信,而命名套接字(即原先的套接字)則被保留下來繼續(xù)處理來自其他客戶的連接?;趕ocket的客戶端比服務(wù)器端簡單,同樣,客戶應(yīng)用程序首先調(diào)用socket來創(chuàng)建一個未命名的套接字,然后將服務(wù)器的命名套接字作為一個地址來調(diào)用connect與服務(wù)器建立連接。一旦連接建立,就可以像使用底層的文件描述符那樣用套接字來實現(xiàn)進(jìn)程雙向數(shù)據(jù)的通信。
[0004]但是,用套接字來實現(xiàn)進(jìn)程雙向數(shù)據(jù)的通信通過一些系統(tǒng)調(diào)用函數(shù),如read/write(最簡單的套接口寫入函數(shù))、recv/send(增加了flags標(biāo)記)、recvfrom/sendto(增加了套接口地址與套接口長度參數(shù)hreadv/writev(沒有標(biāo)記與套接口地址,但是具有分散寫入的能力)、recvmsg/sendmsg(增加標(biāo)記,套接口地址與長度,分散寫入以及附屬數(shù)據(jù)的能力),使用這些函數(shù)可進(jìn)行進(jìn)程間的通信的數(shù)據(jù)收發(fā)操作。但進(jìn)程間通信函數(shù)都是系統(tǒng)調(diào)用,頻繁的進(jìn)程間通信會導(dǎo)致系統(tǒng)性能下降或系統(tǒng)卡頓,特別是一些網(wǎng)絡(luò)設(shè)備命令下發(fā)和處理在不同進(jìn)程中,進(jìn)程通信方式又被其他模塊共用(如日志模塊)時,在大流量日志情況下頻繁的系統(tǒng)調(diào)用會影響系統(tǒng)的正常運(yùn)行,而進(jìn)程間通信沒有統(tǒng)計調(diào)試功能,無法定位具體是哪個模塊哪個函數(shù)在頻繁進(jìn)行進(jìn)程通信導(dǎo)致問題。
【發(fā)明內(nèi)容】
[0005]針對現(xiàn)有技術(shù)方案存在的問題和不足,本發(fā)明提供了一種進(jìn)程間通信的統(tǒng)計調(diào)試方法及系統(tǒng),以解決現(xiàn)有技術(shù)中無法定位頻繁進(jìn)行進(jìn)程通信的模塊函數(shù),而導(dǎo)致系統(tǒng)性能下降或系統(tǒng)卡頓的問題。
[0006]根據(jù)本發(fā)明的一個方面,提供了一種進(jìn)程間通信的統(tǒng)計調(diào)試方法,該方法包括:
[0007]在網(wǎng)絡(luò)設(shè)備間的進(jìn)程通信系統(tǒng)中封裝套接字發(fā)送函數(shù),以使進(jìn)程通信系統(tǒng)中各個模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信;
[0008]采用封裝后的套接字發(fā)送函數(shù)對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,得到每一模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù);
[0009]若模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)大于預(yù)設(shè)閾值,確定該模塊函數(shù)為問題模塊函數(shù)。
[0010]其中,所述方法還包括:
[0011 ]獲取被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息;
[0012]根據(jù)用戶觸發(fā)的查看指令,對確定出的問題模塊函數(shù)、所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)以及所述被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息進(jìn)行輸出展示。
[0013]其中,所述采用封裝后的套接字發(fā)送函數(shù)對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,進(jìn)一步包括:
[0014]創(chuàng)建結(jié)構(gòu)體,并聲明全局變量結(jié)構(gòu)體數(shù)組,其中,所述結(jié)構(gòu)體至少包括模塊ID、模塊名稱、調(diào)用函數(shù)名稱、調(diào)用函數(shù)行號、調(diào)用次數(shù)和目的進(jìn)程名稱,所述全局變量結(jié)構(gòu)體數(shù)組以所述最大模塊ID為下標(biāo),用于對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄;
[0015]當(dāng)進(jìn)程通信系統(tǒng)中模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信時,獲取該模塊函數(shù)的模塊ID、預(yù)調(diào)用的系統(tǒng)通信函數(shù)的函數(shù)名稱和函數(shù)行號,以及目的進(jìn)程名稱;
[0016]根據(jù)模塊函數(shù)的模塊ID將獲取的信息傳入所述全局變量結(jié)構(gòu)體數(shù)組,對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄。
[0017]其中,在所述對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄之前,所述方法還包括:
[0018]根據(jù)預(yù)先設(shè)置的標(biāo)志位的取值,確定是否執(zhí)行所述對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄的步驟。
[0019]其中,所述方法還包括:
[0020]根據(jù)用戶觸發(fā)的清除指令,對確定出的問題模塊函數(shù)以及所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)進(jìn)行清除。
[0021]根據(jù)本發(fā)明的另一個方面,提供了一種進(jìn)程間通信的統(tǒng)計調(diào)試系統(tǒng),該系統(tǒng)包括:
[0022]函數(shù)封裝單元,用于在網(wǎng)絡(luò)設(shè)備間的進(jìn)程通信系統(tǒng)中封裝套接字發(fā)送函數(shù),以使進(jìn)程通信系統(tǒng)中各個模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信;
[0023]消息統(tǒng)計單元,用于采用函數(shù)封裝單元封裝后的套接字發(fā)送函數(shù)對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,得到每一模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù);
[0024]第一確定單元,用于若模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)大于預(yù)設(shè)閾值,確定該模塊函數(shù)為問題模塊函數(shù)。
[0025]其中,所述消息統(tǒng)計單元,還用于獲取被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息;
[0026]相應(yīng)的,所述系統(tǒng)還包括:輸出單元:
[0027]所述輸出單元,用于根據(jù)用戶觸發(fā)的查看指令,對確定出的問題模塊函數(shù)、所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)以及所述被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息進(jìn)行輸出展示。
[0028]其中,所述消息統(tǒng)計單元,進(jìn)一步包括:
[0029]創(chuàng)建子單元,用于創(chuàng)建結(jié)構(gòu)體,并聲明全局變量結(jié)構(gòu)體數(shù)組,其中,所述結(jié)構(gòu)體至少包括模塊ID、模塊名稱、調(diào)用函數(shù)名稱、調(diào)用函數(shù)行號、調(diào)用次數(shù)和目的進(jìn)程名稱,所述全局變量結(jié)構(gòu)體數(shù)組以所述最大模塊ID為下標(biāo),用于對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄;
[0030]獲取子單元,用于當(dāng)進(jìn)程通信系統(tǒng)中模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信時,獲取該模塊函數(shù)的模塊ID、預(yù)調(diào)用的系統(tǒng)通信函數(shù)的函數(shù)名稱和函數(shù)行號,以及目的進(jìn)程名稱;
[0031]統(tǒng)計子單元,用于根據(jù)模塊函數(shù)的模塊ID將獲取的信息傳入所述全局變量結(jié)構(gòu)體數(shù)組,對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄。
[0032]其中,所述系統(tǒng)還包括:
[0033]第二確定單元,用于在所述統(tǒng)計子單元對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄之前,根據(jù)預(yù)先設(shè)置的標(biāo)志位的取值,確定第二確定單元是否執(zhí)行所述對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄的操作。
[0034]其中,所述系統(tǒng)還包括:處理單元,用于根據(jù)用戶觸發(fā)的清除指令,對確定出的問題模塊函數(shù)以及所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)進(jìn)行清除。
[0035]本發(fā)明的有益效果為:
[0036]本發(fā)明提供的進(jìn)程間通信的統(tǒng)計調(diào)試方法及系統(tǒng),通過在網(wǎng)絡(luò)設(shè)備間的進(jìn)程通信系統(tǒng)中封裝套接字發(fā)送函數(shù),各個模塊函數(shù)通過調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信,并對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,得到每一模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù),當(dāng)調(diào)用次數(shù)大于預(yù)設(shè)閾值時,則確定該模塊函數(shù)為問題模塊函數(shù)。本發(fā)明能夠準(zhǔn)確地定位出頻繁進(jìn)行進(jìn)程通信的模塊函數(shù),進(jìn)而避免模塊函數(shù)頻繁進(jìn)行不必要的進(jìn)程通信,而導(dǎo)致系統(tǒng)性能下降或系統(tǒng)卡頓的問題。
[0037]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【附圖說明】
[0038]通過閱讀下文優(yōu)選實施方式的詳細(xì)描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0039]圖1為本發(fā)明實施例提出的一種進(jìn)程間通信的統(tǒng)計調(diào)試方法的流程圖;
[0040]圖2為本發(fā)明實施例提出的一種進(jìn)程間通信的統(tǒng)計調(diào)試系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實施方式】
[0041]下面詳細(xì)描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。
[0042]本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式“一”、“一個”、“所述”和“該”也可包括復(fù)數(shù)形式。應(yīng)該進(jìn)一步理解的是,本發(fā)明的說明書中使用的措辭“包括”是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加一個或多個其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。
[0043]本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(包括技術(shù)術(shù)語和科學(xué)術(shù)語),具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng)該理解的是,諸如通用字典中定義的那些術(shù)語,應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非被特定定義,否則不會用理想化或過于正式的含義來解釋。
[0044]圖1示出了本發(fā)明實施例的一種進(jìn)程間通信的統(tǒng)計調(diào)試方法的流程圖。
[0045]如圖1所示,本發(fā)明實施例提出的進(jìn)程間通信的統(tǒng)計調(diào)試方法具體包括以下步驟:
[0046]步驟S11、在網(wǎng)絡(luò)設(shè)備間的進(jìn)程通信系統(tǒng)中封裝套接字發(fā)送函數(shù),以使進(jìn)程通信系統(tǒng)中各個模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信。
[0047]步驟S12、采用封裝后的套接字發(fā)送函數(shù)對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,得到每一模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)。
[0048]可理解的是,用套接字來實現(xiàn)進(jìn)程雙向數(shù)據(jù)的通信需要通過調(diào)用一些系統(tǒng)通信函數(shù),使用這些函數(shù)可進(jìn)行進(jìn)程間的通信的數(shù)據(jù)收發(fā)操作。具體如,read/write(套接口寫入函數(shù))、recv/send(增加了flags標(biāo)記)、recvfrom/sendto(增加了套接口地址與套接口長度參數(shù))、readv/writev(沒有標(biāo)記與套接口地址,但是具有分散寫入的能力)、recvmsg/s endms g (增加標(biāo)記,套接口地址與長度,分散寫入以及附屬數(shù)據(jù)的能力)等。
[0049]步驟S13、若模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)大于預(yù)設(shè)閾值,確定該模塊函數(shù)為問題模塊函數(shù)。
[0050]本發(fā)明實施例提供的進(jìn)程間通信的統(tǒng)計調(diào)試方法,通過在網(wǎng)絡(luò)設(shè)備間的多進(jìn)程通信系統(tǒng)中封裝套接字發(fā)送函數(shù),并在封裝函數(shù)中增加進(jìn)程通信的按模塊的統(tǒng)計調(diào)試功能,以便統(tǒng)計查看各模塊函數(shù)在進(jìn)程通信中對系統(tǒng)通信函數(shù)的調(diào)用次數(shù),以達(dá)到定位頻繁進(jìn)行進(jìn)程通信的模塊函數(shù)的目的,避免模塊函數(shù)頻繁進(jìn)行不必要的進(jìn)程通信,而導(dǎo)致系統(tǒng)性能下降或系統(tǒng)卡頓的問題。
[0051]本發(fā)明實施例,步驟S12中的采用封裝后的套接字發(fā)送函數(shù)對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,進(jìn)一步包括以下附圖中未示出的步驟:
[0052]創(chuàng)建結(jié)構(gòu)體,并聲明全局變量結(jié)構(gòu)體數(shù)組,其中,所述結(jié)構(gòu)體至少包括模塊ID、模塊名稱、調(diào)用函數(shù)名稱、調(diào)用函數(shù)行號、調(diào)用次數(shù)和目的進(jìn)程名稱,所述全局變量結(jié)構(gòu)體數(shù)組以所述最大模塊ID為下標(biāo),用于對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄;
[0053]當(dāng)進(jìn)程通信系統(tǒng)中模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信時,獲取該模塊函數(shù)的模塊ID、預(yù)調(diào)用的系統(tǒng)通信函數(shù)的函數(shù)名稱和函數(shù)行號,以及目的進(jìn)程名稱;
[0054]根據(jù)模塊函數(shù)的模塊ID將獲取的信息傳入所述全局變量結(jié)構(gòu)體數(shù)組,對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄。
[0055]進(jìn)一步地,在所述對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄之前,所述方法還包括以下步驟:根據(jù)預(yù)先設(shè)置的標(biāo)志位的取值,確定是否執(zhí)行所述對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄的步驟。
[0056]下面通過一個具體實施例對本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說明。
[0057]創(chuàng)建結(jié)構(gòu)體并聲明全局變量結(jié)構(gòu)體數(shù)組(如struct socket_debug_info g_socket_debug_info[M0UID_MAX]),結(jié)構(gòu)體成員包括模塊ID、模塊名稱、調(diào)用函數(shù)名稱、調(diào)用函數(shù)行號、調(diào)用次數(shù)、目的進(jìn)程名稱等,聲明的全局變量結(jié)構(gòu)體數(shù)組以最大模塊ID為下標(biāo),對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,同時聲明全局變量作為標(biāo)志位控制統(tǒng)計功能是否開啟(如g_g_socket_debug_flag);
[0058]封裝進(jìn)程通信發(fā)送函數(shù),新增加四個函數(shù)入?yún)?,分別為模塊ID、調(diào)用函數(shù)名稱、調(diào)用函數(shù)行號、目的進(jìn)程名稱;在需要進(jìn)程通信的各模塊函數(shù)中均調(diào)用封裝后的進(jìn)程通信發(fā)送函數(shù),并把當(dāng)前模塊ID&_LINE_、_FUNCT1N_、目的進(jìn)程名稱作為入?yún)魅敕庋b的進(jìn)程通信發(fā)送函數(shù),在該封裝函數(shù)中會以傳入的模塊ID作為之前聲明的全局變量數(shù)組下標(biāo),統(tǒng)計該模塊的調(diào)用的進(jìn)程通信函數(shù)的相關(guān)信息到全局變量數(shù)組中,包括模塊ID、模塊名稱、調(diào)用函數(shù)名稱、調(diào)用函數(shù)行號、調(diào)用次數(shù)累加、目的進(jìn)程名稱等,具體如下:
[0059]g_socket_debug_info[MOU_ID].mou_id=M0U_ID;
[0060]g_socket_debug_info[MOU_ID].mou_name = get_name_by_id(MOU_ID);
[0061]g_socket_debug_info[MOU_ID].pfunc=_FUNCT10N;
[0062]g_socket_debug_info[MOU_ID].func_line =_LINE_;
[0063]g_socket_debug_info[MOU_ID].count = count++;
[0064]g_socket_debug_info[MOU_ID].dest_task = PID;其中,PID為賦值發(fā)往的目的進(jìn)程PID,該統(tǒng)計功能通過之前聲明的全局變量標(biāo)志位控制是否開啟或關(guān)閉。
[0065]在本發(fā)明實施例中,所述方法還包括以下附圖中未示出的以下步驟:
[0066]獲取被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息。需要說明的是,本實施例中的被調(diào)用的系統(tǒng)通信函數(shù)的位置信息為被調(diào)用的系統(tǒng)函數(shù)的行號。
[0067]根據(jù)用戶觸發(fā)的查看指令,對確定出的問題模塊函數(shù)、所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)以及所述被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息進(jìn)行輸出展示。
[0068]在本發(fā)明實施例中,所述方法還包括以下附圖中未示出的以下步驟:根據(jù)用戶觸發(fā)的清除指令,對確定出的問題模塊函數(shù)以及所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)進(jìn)行清除。
[0069]在本發(fā)明另一實施例中,所述方法還包括根據(jù)用戶觸發(fā)的控制指令,控制進(jìn)程通信統(tǒng)計調(diào)試功能開啟或關(guān)閉的步驟。本發(fā)明實施例中,增加開關(guān)的目的是在需要使用時開啟,平時為不影響性能可默認(rèn)關(guān)閉;通過統(tǒng)計顯示的信息可快速知道進(jìn)程通信的模塊、函數(shù)及具體行號,可根據(jù)調(diào)用次數(shù)的增加情況判斷是否有頻繁的進(jìn)程通信發(fā)生,作為判斷系統(tǒng)性能下降或系統(tǒng)卡頓的依據(jù)。
[0070]在實際應(yīng)用中,可通過新增命令行控制進(jìn)程通信統(tǒng)計調(diào)試功能開啟或關(guān)閉,以及查看或清除統(tǒng)計到的進(jìn)程通信信息,查看功能為以M0UID_MAX為最大值for循環(huán)的方式遍歷g_socket_debug_info[;^ji|;組結(jié)構(gòu)體,將統(tǒng)計保存的信息打印輸出;清除功能為以M0UID_1八父為最大值;^1'循環(huán)的方式遍歷8_80 01^1:_(16131^_;[1^0[]數(shù)組結(jié)構(gòu)體并使成員清空(memset也可)。
[0071]本發(fā)明實施例提供的進(jìn)程間通信的統(tǒng)計調(diào)試方法,便于統(tǒng)計查看各進(jìn)程各模塊進(jìn)程通信函數(shù)調(diào)用的次數(shù)與頻率,同時輸出調(diào)用函數(shù)名稱及行號,以達(dá)到定位頻繁的進(jìn)程通信導(dǎo)致系統(tǒng)性能下降或系統(tǒng)卡頓問題的目的。
[0072]對于方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明實施例并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明實施例,某些步驟可以采用其他順序或者同時進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作并不一定是本發(fā)明實施例所必須的。
[0073]圖2示出了本發(fā)明另一實施例提出的一種進(jìn)程間通信的統(tǒng)計調(diào)試系統(tǒng)的結(jié)構(gòu)示意圖。
[0074]如圖2所示,本發(fā)明實施例提出的進(jìn)程間通信的統(tǒng)計調(diào)試系統(tǒng)包括函數(shù)封裝單元201、消息統(tǒng)計單元202和第一確定單元203,其中:
[0075]所述函數(shù)封裝單元201,用于在網(wǎng)絡(luò)設(shè)備間的進(jìn)程通信系統(tǒng)中封裝套接字發(fā)送函數(shù),以使進(jìn)程通信系統(tǒng)中各個模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信;
[0076]所述消息統(tǒng)計單元202,用于采用函數(shù)封裝單元封裝后的套接字發(fā)送函數(shù)對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,得到每一模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù);
[0077]所述第一確定單元203,用于若模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)大于預(yù)設(shè)閾值,確定該模塊函數(shù)為問題模塊函數(shù)。
[0078]本發(fā)明實施例中,所述消息統(tǒng)計單元,還用于獲取被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息;
[0079]相應(yīng)的,所述系統(tǒng)還包括附圖中未示出的輸出單元:
[0080]所述輸出單元,用于根據(jù)用戶觸發(fā)的查看指令,對確定出的問題模塊函數(shù)、所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)以及所述被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息進(jìn)行輸出展示。
[0081]本發(fā)明實施例中,所述消息統(tǒng)計單元,進(jìn)一步包括創(chuàng)建子單元、獲取子單元和統(tǒng)計子單元,其中:
[0082]所述創(chuàng)建子單元,用于創(chuàng)建結(jié)構(gòu)體,并聲明全局變量結(jié)構(gòu)體數(shù)組,其中,所述結(jié)構(gòu)體至少包括模塊ID、模塊名稱、調(diào)用函數(shù)名稱、調(diào)用函數(shù)行號、調(diào)用次數(shù)和目的進(jìn)程名稱,所述全局變量結(jié)構(gòu)體數(shù)組以所述最大模塊ID為下標(biāo),用于對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄;
[0083]所述獲取子單元,用于當(dāng)進(jìn)程通信系統(tǒng)中模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信時,獲取該模塊函數(shù)的模塊ID、預(yù)調(diào)用的系統(tǒng)通信函數(shù)的函數(shù)名稱和函數(shù)行號,以及目的進(jìn)程名稱;
[0084]所述統(tǒng)計子單元,用于根據(jù)模塊函數(shù)的模塊ID將獲取的信息傳入所述全局變量結(jié)構(gòu)體數(shù)組,對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄。
[0085]本發(fā)明實施例中,所述系統(tǒng)還包括附圖中未示出的第二確定單元,所述第二確定單元,用于在所述統(tǒng)計子單元對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄之前,根據(jù)預(yù)先設(shè)置的標(biāo)志位的取值,確定第二確定單元是否執(zhí)行所述對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄的操作。
[0086]其中,所述系統(tǒng)還包括附圖中未示出的處理單元,所述處理單元用于根據(jù)用戶觸發(fā)的清除指令,對確定出的問題模塊函數(shù)以及所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)進(jìn)行清除。
[0087]對于系統(tǒng)實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
[0088]綜上,本發(fā)明實施例提供的進(jìn)程間通信的統(tǒng)計調(diào)試方法及系統(tǒng),通過在網(wǎng)絡(luò)設(shè)備間的進(jìn)程通信系統(tǒng)中封裝套接字發(fā)送函數(shù),各個模塊函數(shù)通過調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信,并對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,得到每一模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù),當(dāng)調(diào)用次數(shù)大于預(yù)設(shè)閾值時,則確定該模塊函數(shù)為問題模塊函數(shù)。本發(fā)明能夠準(zhǔn)確地定位出頻繁進(jìn)行進(jìn)程通信的模塊函數(shù),進(jìn)而避免模塊函數(shù)頻繁進(jìn)行不必要的進(jìn)程通信,而導(dǎo)致系統(tǒng)性能下降或系統(tǒng)卡頓的問題。
[0089]通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可以通過硬件實現(xiàn),也可以借助軟件加必要的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是CD-R0M,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。
[0090]本領(lǐng)域技術(shù)人員可以理解附圖只是一個優(yōu)選實施例的示意圖,附圖中的模塊或流程并不一定是實施本發(fā)明所必須的。
[0091]本領(lǐng)域技術(shù)人員可以理解實施例中的系統(tǒng)中的模塊可以按照實施例描述進(jìn)行分布于實施例的系統(tǒng)中,也可以進(jìn)行相應(yīng)變化位于不同于本實施例的一個或多個系統(tǒng)中。上述實施例的模塊可以合并為一個模塊,也可以進(jìn)一步拆分成多個子模塊。
[0092]以上所述僅是本發(fā)明的部分實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
【主權(quán)項】
1.一種進(jìn)程間通信的統(tǒng)計調(diào)試方法,其特征在于,所述方法包括: 在網(wǎng)絡(luò)設(shè)備間的進(jìn)程通信系統(tǒng)中封裝套接字發(fā)送函數(shù),以使進(jìn)程通信系統(tǒng)中各個模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信; 采用封裝后的套接字發(fā)送函數(shù)對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,得到每一模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù); 若模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)大于預(yù)設(shè)閾值,確定該模塊函數(shù)為問題模塊函數(shù)。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 獲取被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息; 根據(jù)用戶觸發(fā)的查看指令,對確定出的問題模塊函數(shù)、所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)以及所述被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息進(jìn)行輸出展示。3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述采用封裝后的套接字發(fā)送函數(shù)對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,進(jìn)一步包括: 創(chuàng)建結(jié)構(gòu)體,并聲明全局變量結(jié)構(gòu)體數(shù)組,其中,所述結(jié)構(gòu)體至少包括模塊ID、模塊名稱、調(diào)用函數(shù)名稱、調(diào)用函數(shù)行號、調(diào)用次數(shù)和目的進(jìn)程名稱,所述全局變量結(jié)構(gòu)體數(shù)組以所述最大模塊ID為下標(biāo),用于對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄; 當(dāng)進(jìn)程通信系統(tǒng)中模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信時,獲取該模塊函數(shù)的模塊ID、預(yù)調(diào)用的系統(tǒng)通信函數(shù)的函數(shù)名稱和函數(shù)行號,以及目的進(jìn)程名稱;根據(jù)模塊函數(shù)的模塊ID將獲取的信息傳入所述全局變量結(jié)構(gòu)體數(shù)組,對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄。4.根據(jù)權(quán)利要求3所述的方法,其特征在于,在所述對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄之前,所述方法還包括: 根據(jù)預(yù)先設(shè)置的標(biāo)志位的取值,確定是否執(zhí)行所述對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄的步驟。5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 根據(jù)用戶觸發(fā)的清除指令,對確定出的問題模塊函數(shù)以及所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)進(jìn)行清除。6.一種進(jìn)程間通信的統(tǒng)計調(diào)試系統(tǒng),其特征在于,所述系統(tǒng)包括: 函數(shù)封裝單元,用于在網(wǎng)絡(luò)設(shè)備間的進(jìn)程通信系統(tǒng)中封裝套接字發(fā)送函數(shù),以使進(jìn)程通信系統(tǒng)中各個模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信; 消息統(tǒng)計單元,用于采用函數(shù)封裝單元封裝后的套接字發(fā)送函數(shù)對各個模塊函數(shù)的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄,得到每一模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù); 第一確定單元,用于若模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)大于預(yù)設(shè)閾值,確定該模塊函數(shù)為問題模塊函數(shù)。7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述消息統(tǒng)計單元,還用于獲取被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息; 相應(yīng)的,所述系統(tǒng)還包括:輸出單元: 所述輸出單元,用于根據(jù)用戶觸發(fā)的查看指令,對確定出的問題模塊函數(shù)、所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)以及所述被調(diào)用的系統(tǒng)通信函數(shù)的名稱和位置信息進(jìn)行輸出展示。8.根據(jù)權(quán)利要求6或7所述的系統(tǒng),其特征在于,所述消息統(tǒng)計單元,進(jìn)一步包括: 創(chuàng)建子單元,用于創(chuàng)建結(jié)構(gòu)體,并聲明全局變量結(jié)構(gòu)體數(shù)組,其中,所述結(jié)構(gòu)體至少包括模塊ID、模塊名稱、調(diào)用函數(shù)名稱、調(diào)用函數(shù)行號、調(diào)用次數(shù)和目的進(jìn)程名稱,所述全局變量結(jié)構(gòu)體數(shù)組以所述最大模塊ID為下標(biāo),用于對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄; 獲取子單元,用于當(dāng)進(jìn)程通信系統(tǒng)中模塊函數(shù)調(diào)用封裝后的套接字發(fā)送函數(shù)進(jìn)行進(jìn)程通信時,獲取該模塊函數(shù)的模塊ID、預(yù)調(diào)用的系統(tǒng)通信函數(shù)的函數(shù)名稱和函數(shù)行號,以及目的進(jìn)程名稱; 統(tǒng)計子單元,用于根據(jù)模塊函數(shù)的模塊ID將獲取的信息傳入所述全局變量結(jié)構(gòu)體數(shù)組,對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄。9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 第二確定單元,用于在所述統(tǒng)計子單元對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄之前,根據(jù)預(yù)先設(shè)置的標(biāo)志位的取值,確定第二確定單元是否執(zhí)行所述對發(fā)送方向的進(jìn)程通信消息進(jìn)行統(tǒng)計與記錄的操作。10.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 處理單元,用于根據(jù)用戶觸發(fā)的清除指令,對確定出的問題模塊函數(shù)以及所述問題模塊函數(shù)對系統(tǒng)通信函數(shù)的調(diào)用次數(shù)進(jìn)行清除。
【文檔編號】G06F11/36GK105843738SQ201610165212
【公開日】2016年8月10日
【申請日】2016年3月22日
【發(fā)明人】高福亮
【申請人】漢柏科技有限公司