[英]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.