iOS app exception的解決方案


最近項目中總是碰到libsystem_kernel.dylib`__pthread_kill + 8, stop reason = signal SIGABRT

類似於這樣的錯誤,但是出現這樣的錯誤之后總是無法定位問題具體的位置。

(lldb) bt

* thread #1: tid = 0x2403, 0x31c16350 libsystem_kernel.dylib`__pthread_kill + 8, stop reason = signal SIGABRT

    frame #0: 0x31c16350 libsystem_kernel.dylib`__pthread_kill + 8

    frame #1: 0x34fa5122 libsystem_c.dylib`pthread_kill + 58

    frame #2: 0x34fe1972 libsystem_c.dylib`abort + 94

    frame #3: 0x38101d4e libc++abi.dylib`abort_message + 74

    frame #4: 0x380ff0da libc++abi.dylib`safe_handler_caller(void (*)()) + 174

    frame #5: 0x380ff114 libc++abi.dylib`std::terminate() + 20

    frame #6: 0x38100598 libc++abi.dylib`__cxa_rethrow + 88

    frame #7: 0x33e0f9d0 libobjc.A.dylib`objc_exception_rethrow + 12

    frame #8: 0x39e66f20 CoreFoundation`CFRunLoopRunSpecific + 456

    frame #9: 0x39e66d48 CoreFoundation`CFRunLoopRunInMode + 104

    frame #10: 0x382342ea GraphicsServices`GSEventRunModal + 74

    frame #11: 0x330a62f8 UIKit`UIApplicationMain + 1120

    frame #12: 0x0001174c XingVelo3`main + 152 at main.m:16

方法一

通過在Xcode的控制台里面打印具體的值

主要命令是bt 或者thread backtrace

  1. If you're using gdb, use bt to print the backtrace

  2. If you're using lldb, use thread backtrace instead

出現錯誤之后把信息打印出來,然后追蹤具體的位置。但是僅僅這樣還不夠,很多信息看不到。

 

方法二,設置exception breakpoint

這個方法可以直接定位到出錯的位置,非常強大,也是最近才發現的。

添加exception break point的方法,下面是說明。

If you're running your app out of Xcode, add an exception breakpoint. In the breakpoint navigator (command-6) hit the '+' at the very bottom left to add. This will pause execution on the line that throws the exception and allow you to inspect the current scope, stack, etc.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM