ios crash的原因與抓取crash日誌的方法

2022-08-22 17:18:16 字數 3598 閱讀 4572

首先我們經常會閃退的異常有哪些呢?crash的產生**於兩種問題:違反ios策略被乾掉,以及自身的**bug。

1.ios策略

1.1低記憶體閃退

前面提到大多數crash日誌都包含著執行執行緒的棧呼叫資訊,但是低記憶體閃退日誌除外,這裡就先看看低記憶體閃退日誌是什麼樣的。

我們使用xcode 5和ios 7的裝置模擬一次低記憶體閃退,然後通過organizer檢視產生的crash日誌,可以發現process和type都為unknown:

1.2 watchdog超時1.3使用者強制退出

一看到「使用者強制退出」,首先可能想到的雙擊home鍵,然後關閉應用程式。不過這種場景是不會產生crash日誌的,因為雙擊home鍵後,所有的應用程式都處於後台狀態,而ios隨時都有可能關閉後台程序,所以這種場景沒有crash日誌。

另一種場景是使用者同時按住電源鍵和home鍵,讓iphone重啟。這種場景會產生日誌(僅驗證過一次),但並不針對特定應用程式。

這裡指的「使用者強制退出」場景,是稍微比較複雜點的操作:先按住電源鍵,直到出現「滑動關機」的介面時,再按住home鍵,這時候當前應用程式會被終止掉,並且產生乙份相應事件的crash日誌。

通常,使用者應該是遇到應用程式卡死,並且影響到了ios響應,才會進行這樣的操作——不過感覺這操作好高階,所以這樣的crash日誌應該比較少見。

2.**bug

此外,比較常見的崩潰基本都源於**bug,比如陣列越界、插空、空引用、引用未定義方法、多執行緒安全性、訪問野指標、傳送未實現的selector等。

再來談談獲取ios裝置上崩潰日誌(crash log)的方法

第乙個方法:xcode  的選單window->organizer    選擇devices  ->  選中的手機 -> 點選手機名稱左邊的箭頭 會等到如下圖

在右邊豎藍色矩形框中 type裡面出現兩種型別:unknown和crash 這兩種型別分別是 記憶體不夠**記憶體kill應用程式導致crash和程式異常crash的日誌。

第二種方法 開啟手機 - > 設定 -> 通用 - > 關於本機 - > 診斷與用量 - > 診斷與用量資料  這裡面就是所有應用的crash日誌。(本人沒找到這個)

第三種方法使用第三方軟體:itools

如果你平時不用itunes,而是使用itools這類第三方的軟體對iphone裝置進行管理,也是沒問題的。

開啟itools,在你的裝置下,找到「高階功能」,點選「崩潰日誌」,然後將需要的日誌匯出到電腦裡面就可以了!

大部分使用者可能都會使用itunes軟體來管理iphone或者ipad裝置,這時候同步的crash日誌就會同步到電腦上,我們只需要在特定的路徑裡面尋找即可。

mac os x:~/library/logs/crashreporter/mobiledevice

windows 7/vista:c:\users\計算機登入名

1.ios策略

1.1低記憶體閃退

前面提到大多數crash日誌都包含著執行執行緒的棧呼叫資訊,但是低記憶體閃退日誌除外,這裡就先看看低記憶體閃退日誌是什麼樣的。

我們使用xcode 5和ios 7的裝置模擬一次低記憶體閃退,然後通過organizer檢視產生的crash日誌,可以發現process和type都為unknown:

1.2 watchdog超時1.3使用者強制退出

一看到「使用者強制退出」,首先可能想到的雙擊home鍵,然後關閉應用程式。不過這種場景是不會產生crash日誌的,因為雙擊home鍵後,所有的應用程式都處於後台狀態,而ios隨時都有可能關閉後台程序,所以這種場景沒有crash日誌。

另一種場景是使用者同時按住電源鍵和home鍵,讓iphone重啟。這種場景會產生日誌(僅驗證過一次),但並不針對特定應用程式。

這裡指的「使用者強制退出」場景,是稍微比較複雜點的操作:先按住電源鍵,直到出現「滑動關機」的介面時,再按住home鍵,這時候當前應用程式會被終止掉,並且產生乙份相應事件的crash日誌。

通常,使用者應該是遇到應用程式卡死,並且影響到了ios響應,才會進行這樣的操作——不過感覺這操作好高階,所以這樣的crash日誌應該比較少見。

2.**bug

此外,比較常見的崩潰基本都源於**bug,比如陣列越界、插空、空引用、引用未定義方法、多執行緒安全性、訪問野指標、傳送未實現的selector等。

再來談談獲取ios裝置上崩潰日誌(crash log)的方法

第乙個方法:xcode  的選單window->organizer    選擇devices  ->  選中的手機 -> 點選手機名稱左邊的箭頭 會等到如下圖

在右邊豎藍色矩形框中 type裡面出現兩種型別:unknown和crash 這兩種型別分別是 記憶體不夠**記憶體kill應用程式導致crash和程式異常crash的日誌。

第二種方法 開啟手機 - > 設定 -> 通用 - > 關於本機 - > 診斷與用量 - > 診斷與用量資料  這裡面就是所有應用的crash日誌。(本人沒找到這個)

第三種方法使用第三方軟體:itools

如果你平時不用itunes,而是使用itools這類第三方的軟體對iphone裝置進行管理,也是沒問題的。

開啟itools,在你的裝置下,找到「高階功能」,點選「崩潰日誌」,然後將需要的日誌匯出到電腦裡面就可以了!

大部分使用者可能都會使用itunes軟體來管理iphone或者ipad裝置,這時候同步的crash日誌就會同步到電腦上,我們只需要在特定的路徑裡面尋找即可。

mac os x:~/library/logs/crashreporter/mobiledevice

windows 7/vista:c:\users\計算機登入名

基於Socket與C的WEB頁面抓取程式

基於c與socket編寫了乙個http頁面檢查程式,通過這個程式,可以載入指定web伺服器上的頁面資訊,這在爬蟲 抓取web頁面 分析是否有掛馬行為有參考意義。如下 printf 傳送完畢 intilen recv ds clientsocket,recvbuf,1000000,0 if ilen ...

C 抓取網頁的原始碼

1 包含標頭檔案 include 2 導入庫檔案 pragma comment lib,wininet.lib 3 使用windowsapi 實現獲取網頁原始碼 獲取網頁的原始碼,引數1為網頁鏈結,2為緩衝區指標 bool cfasdfasdfdlg gethtml lpctstr szurl cs...

C 抓取網頁內容的方法

1 抓取一般內容 需要三個類 webrequest webresponse streamreader 所需命名空間 system.net system.io 核心 view plaincopy to clipboardprint?如下 webrequest request webrequest.cr...