簡體   English   中英

目標C - 從調試器錯誤中獲取行號或完整堆棧跟蹤?

[英]Objective C - getting line number or full stack trace from debugger error?

是否可以從調試器獲取源代碼的行號(或任何有助於調試問題所在的位置),以顯示問題的來源?

我收到一個錯誤:

-[NSCFArray objectAtIndex:]: index (-1 (or possibly larger)) beyond bounds (9)

這顯然意味着我在某些時候會超出界限,但是如果有可能我想獲得更多信息來幫助我解決問題。

我正在設置斷點並嘗試逐行完成程序,但這是一個繁瑣的過程。 謝謝!

當調試器停止時,轉到“Debug Navigator”並確保底部的滑塊一直向右。

從拋出異常的位置向下掃描你的眼睛,你最終應該找到自己的代碼。 單擊相應的方法/函數名稱,代碼將在編輯器中打開。

在此輸入圖像描述

在此輸入圖像描述

如果在堆棧跟蹤中沒有看到任何自己的方法,則異常可能已通過performSelector樣式調用傳遞,在這種情況下堆棧跟蹤消失。 如果是這種情況,您可以通過添加“On Throw”異常斷點來獲得更好的信息。 首先切換到“斷點導航器”:

在此輸入圖像描述

然后單擊加號並選擇“添加異常斷點...”

在此輸入圖像描述

創建一個“On Throw”斷點:

在此輸入圖像描述

這將在拋出異常的確切位置停止調試器,並獲得更好的堆棧跟蹤。 盡管偶爾會從Apple代碼中獲取內部異常(例如,在使用QLPreviewController,MPMoviePlayerController時),但最好始終啟用這樣的異常斷點。

您還應該考慮使用NSSetUncaughtExceptionHandler。 (您可以將崩潰日志保存到磁盤,如果保存了新的崩潰日志,請檢查下次啟動,將其附加到電子郵件等)

把它放到你的didFinishLaunchingWithOptions方法中:

NSSetUncaughtExceptionHandler(&exceptionHandler);

並實現您的異常處理程序:

void exceptionHandler(NSException *exception)
{        
    NSLog(@"%@",[exception name]);
    NSLog(@"%@",[exception reason]);
    NSLog(@"%@",[exception userInfo]);
    NSLog(@"%@",[exception callStackSymbols]);
    NSLog(@"%@",[exception callStackReturnAddresses]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM