本發明涉及終端技術領域,具體涉及一種異常信號處理方法及裝置。
背景技術:
客戶端在運行過程中,可能會因為各種原因而發生崩潰,解決崩潰問題是移動應用開發者日常的工作之一。
目前,操作系統中引發客戶端崩潰的代碼本質上有兩類,一類是C++語言層面的異常,比如野指針、除零、內存訪問異常等系統底層異常;另一類是未捕獲異常,比如iOS操作系統中最常見的objective-c的NSException。
對于上述第一類異常,可通過信號機制來捕獲,即任何系統異常都會拋出一個異常信號,通過設定的signal函數對異常信號進行捕獲。然而,該signal函數在捕獲到異常信號后會“吃掉”該異常信號,這使得其它有捕獲該異常信號需求的工程師就無法捕獲該異常信號了。
技術實現要素:
本發明提供一種異常信號處理方法及裝置,使得已被捕獲的異常信號能夠被再次捕獲。
本發明一方面提供一種異常信號處理方法,包括:
對異常信號進行捕獲;
當捕獲到異常信號時,記錄當前捕獲到的上述異常信號的位置信息;
根據記錄的上述異常信號的位置信息再次引發上述異常信號。
基于上述第一方面,在第一種可能的實現方式中,上述對異常信號進行捕獲具體為:通過signal函數或sigaction函數對異常信號進行捕獲;
上述當捕獲到異常信號時,存儲當前捕獲到的異常信號的位置信息,具體為:當通過signal函數或sigaction函數捕獲到異常信號時,記錄當前捕獲到的上述異常信號的位置信息。
基于上述第一方面,或者上述第一方面的第一種可能的實現方式,在第二種可能的實現方式中,上述根據記錄的上述異常信號的位置信息再次引發上述異常信號,具體為:
根據記錄的上述異常信號的位置信息,調用raise函數引發上述異常信號。
基于上述第一方面,或者上述第一方面的第一種可能的實現方式,在第三種可能的實現方式中,當捕獲到異常信號之后,上述方法還包括:
通過Utils.Log方法并基于上述異常信號生成崩潰日志。
基于本發明第一方面的第三種可能的實現方式,在第四種可能的實現方式中,上述通過Utils.Log方法將上述異常信號記錄到崩潰日志中,之后還包括:
上報上述崩潰日志。
本發明第二方面提供一種異常信號處理裝置,包括:
捕獲單元,用于對異常信號進行捕獲;
記錄單元,用于當上述捕獲單元捕獲到異常信號時,記錄當前捕獲到的上述異常信號的位置信息;
激活單元,用于根據上述記錄單元記錄的上述異常信號的位置信息再次引發上述異常信號。
基于本發明第二方面,在第一種可能的實現方式中,上述捕獲單元具體用于:通過signal函數或sigaction函數對異常信號進行捕獲;
上述記錄單元具體用于:當上述捕獲單元捕獲到通過signal函數或sigaction函數捕獲到異常信號時,記錄當前捕獲到的上述異常信號的位置信息。
基于本發明第二方面,或者本發明第二方面的第一種可能的實現方式,在第二種可能的實現方式中,上述激活單元具體用于:根據上述記錄單元記錄的上述異常信號的位置信息,調用raise函數引發上述異常信號。
基于本發明第二方面,或者本發明第二方面的第一種可能的實現方式,在第三種可能的實現方式中,上述異常信號處理裝置還包括:
生成單元,用于通過Utils.Log方法并基于上述捕獲單元捕獲到的異常信號生成崩潰日志。
基于本發明第二方面的第三種可能的實現方式,在第四種可能的實現方式中,上述異常信號處理裝置還包括:
上報單元,用于上報上述生成單元生成的上述崩潰日志。
由上可見,本發明在捕獲到異常信號時,記錄當前捕獲到的異常信號的位置信息,之后根據記錄的異常信號的位置信息再次引發該異常信號,從而不影響其他人對該異常信號的捕獲,使得已被捕獲的異常信號能夠被再次捕獲。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明提供的一種異常信號處理方法一個實施例流程示意圖;
圖2為本發明提供的一種異常信號處理裝置一個實施例結構示意圖。
具體實施方式
為使得本發明的發明目的、特征、優點能夠更加的明顯和易懂,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而非全部實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
實施例一
本發明實施例提供一種異常信號處理方法,請參閱圖1,本發明實施例中的異常信號處理方法,包括:
步驟101、對異常信號進行捕獲;
本發明實施例中提及的異常信號主要是指野指針、除零、內存訪問異常等系統底層的異常信號。
可選的,通過signal函數或sigaction函數對異常信號進行捕獲。下面分別對通過signal函數或sigaction函數進行說明:
1、對于signal函數,在<signal.h>這個頭文件中,其函數格式如下:
signal(參數1,參數2);
其中,參數1表示待處理的信號,參數2表示處理的方式(例如系統默認操作、忽略還是捕獲)。
在本發明實施例中,通過將上述參數1設置為待捕獲的異常信號(例如系統底層的異常信號),將參數2設置為捕獲,以此實現通過signal函數對異常信號進行捕獲。
2、sigaction函數的接口頭文件及原型如下:
#include<signal.h>
int sigaction(int signum,const struct sigaction*act,struct sigaction*oldact);
其中,signum表示待處理的信號;act表示對待處理的信號的新處理方式;oldact表示對待處理的信號的原處理方式。
在本發明實施例中,通過將signum設置為待捕獲的異常信號(例如系統底層的異常信號),將act設置為捕獲,即可實現通過sigaction函數對異常信號進行捕獲。
當然,本發明實施例中也可以通過其它方式對異常信號進行捕獲,此處不作限定。
步驟102、當捕獲到異常信號時,記錄當前捕獲到的上述異常信號的位置信息;
本發明實施例中,當步驟101捕獲到異常信號時,記錄當前捕獲到的上述異常信號的位置信息。由于此時異常信號多是位于內存中,因此,當捕獲到異常信號時,上述記錄當前捕獲到的上述異常信號的位置信息實質上是為記錄當前捕獲到的上述異常信號在內存中的位置信息。
可選的,只在通過signal函數或sigaction函數捕獲到異常信號時,才記錄當前捕獲到的上述異常信號的位置信息。則步驟102具體表現為:當通過signal函數或sigaction函數捕獲到異常信號時,記錄當前捕獲到的上述異常信號的位置信息。
步驟103、根據記錄的上述異常信號的位置信息再次引發上述異常信號;
本發明實施例中,根據步驟102記錄的上述異常信號的位置信息激活上述異常信息,以便再次引發上述異常信號。
具體地,可以根據記錄的上述異常信號的位置信息,調用raise函數引發步驟102記錄的異常信號。下面對raise函數進行說明:
raise函數所需頭文件:
#include<signal.h>
#include<sys/types.h>
函數原型
Int raise(int sig)
其中,sig表示待發送的信號,本發明實施例中,通過將sig設置為捕獲到的異常信號,即可實現通過raise函數再次引發捕獲到的異常信號。
進一步,當捕獲到異常信號之后,基于捕獲到的異常信號生成崩潰日志。具體地,可通過Utils.Log方法并基于步驟101捕獲到的異常信號生成崩潰日志。
進一步,在生成崩潰日志之后,上報該崩潰日志,以便工程人員基于該崩潰日志進行異常的分析和解決。
需要說明的是,本發明實施例中的異常信號處理方法具體可以由異常信號處理裝置實現,該異常信號處理裝置可以為智能終端(例如智能手機、平板電腦等),具體地,該異常信號處理裝置可以搭載iOS操作系統、Andorid操作系統或其它底層為unix系統(或類unix系統)的操作系統的智能終端中。
由上可見,本發明在捕獲到異常信號時,記錄當前捕獲到的異常信號的位置信息,之后根據記錄的異常信號的位置信息再次引發該異常信號,從而不影響其他人對該異常信號的捕獲,使得已被捕獲的異常信號能夠被再次捕獲。
實施例二
本發明實施例提供一種異常信號處理裝置。請參閱圖2,本發明實施例中的異常信號處理裝置200,包括:
捕獲單元201,用于對異常信號進行捕獲;
記錄單元202,用于當捕獲單元201捕獲到異常信號時,記錄當前捕獲到的上述異常信號的位置信息;
激活單元203,用于根據記錄單元202記錄的上述異常信號的位置信息再次引發上述異常信號。
可選的,捕獲單元201具體用于:通過signal函數或sigaction函數對異常信號進行捕獲;記錄單元202具體用于:當捕獲單元201捕獲到通過signal函數或sigaction函數捕獲到異常信號時,記錄當前捕獲到的上述異常信號的位置信息。
可選的,激活單元203具體用于:根據記錄單元202記錄的上述異常信號的位置信息,調用raise函數引發上述異常信號。
可選的,本發明實施例中的異常信號處理裝置還包括:
生成單元,用于通過Utils.Log方法并基于上述捕獲單元捕獲到的異常信號生成崩潰日志。
進一步,本發明實施例中的異常信號處理裝置還包括:
上報單元,用于上報上述生成單元生成的上述崩潰日志。
需要說明的是,本發明實施例中的異常信號處理裝置可以為智能終端(例如智能手機、平板電腦等),具體地,該異常信號處理裝置可以搭載iOS操作系統、Andorid操作系統或其它底層為unix系統(或類unix系統)的操作系統的智能終端中。
應理解,本發明實施例中的異常信號處理裝置的各個功能模塊的功能可以根據上述方法實施例中的方法具體實現,其具體實現過程可參照上述方法實施例中的相關描述,此處不再贅述。
由上可見,本發明在捕獲到異常信號時,記錄當前捕獲到的異常信號的位置信息,之后根據記錄的異常信號的位置信息再次引發該異常信號,從而不影響其他人對該異常信號的捕獲,使得已被捕獲的異常信號能夠被再次捕獲。
需要說明的是,在本申請所提供的幾個實施例中,應該理解到,所揭露的裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,上述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
對于前述的各方法實施例,為了簡便描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明并不受所描述的動作順序的限制,因為依據本發明,某些步驟可以采用其它順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優選實施例,所涉及的動作和模塊并不一定都是本發明所必須的。
在上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其它實施例的相關描述。
以上為對本發明所提供的一種異常信號處理方法及裝置的描述,對于本領域的一般技術人員,依據本發明實施例的思想,在具體實施方式及應用范圍上均會有改變之處,綜上,本說明書內容不應理解為對本發明的限制。