How to get source code line from stack trace in obj-c / ios

后端 未结 4 1412
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-02-05 06:31

I use NSSetUncaughtExceptionHandler to print the stack trace to local file in iPhone, which will be sent to our server next time the app launches. Then I can examin

相关标签:
4条回答
  • 2021-02-05 06:36

    Print the stack trace stored in the exception, i.e. [exception callStackSymbols] or [exception callStackReturnAddresses]. In Apple's crash logs since iOS 5, this shows up at the top as "Last Exception Backtrace".

    What you're seeing is the call stack when the exception is re-thrown, which will happen for things as simple as try...finally. I'm not sure exactly why Apple made this change (possibly to make run loops exception-safe?), but there you go.

    0 讨论(0)
  • 2021-02-05 06:42

    I strongly recommend enabling Exception Breakpoint in Xcode. It will stop execution of your code on the exact line which crashes your application. So you do not need to worry about which of the array cause of the crash. *** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array

    Adding exception breakpoint

    1. Go to Breakpoints section on Xcode
    2. Click on plus sing at bottom of the section
    3. Select Add Exception Breakpoint

    Exception BreakPoint

    0 讨论(0)
  • 2021-02-05 06:47

    I don't know how to get line numbers from stack traces (yet), but at some points in my code where I want to get line number printed I used the have the following code fragment:

    NSLog(@"%s line=%d", __func__, __LINE__);
    

    which will give the following output:

    2013-04-01 00:16:46.393 MyApp[847:c07] -[AppDelegate application:didFinishLaunchingWithOptions:] line=29
    

    If you're familiar with the Log4J framework I'ld suggest to take a look at the Lumberjack framework which proves to be very helpful for me in various projects.

    https://github.com/robbiehanson/CocoaLumberjack
    

    Although this may not directly answer your question, its just meant as a reminder.

    0 讨论(0)
  • 2021-02-05 06:55

    Set a breakpoint in the catch block, once the flow of code stops you can use gdb commands like 'bt'.

    0 讨论(0)
提交回复
热议问题