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

后端 未结 2 675
再見小時候
再見小時候 2020-12-02 09:24

Is it possible to get a line number for the source code (or anything that helps debug where the problem is) from the debugger, that shows where the problem is originating?

相关标签:
2条回答
  • 2020-12-02 09:52

    When the debugger stops, go to the "Debug Navigator" and make sure the slider on the bottom is all the way to the right.

    Scan your eye down from the point at which the exception is thrown and you should eventually come to your own code. Click on the appropriate method/function name and the code will be opened in the editor.

    enter image description here

    enter image description here

    If you don't see any of your own methods in the stack trace, the exception may have been passed through a performSelector-style call in which case the stack trace is gone. If this is the case, you may get better information by adding an "On Throw" exception break point. First switch to the "Breakpoint navigator":

    enter image description here

    Then click on the plus and choose "Add Exception breakpoint..."

    enter image description here

    Create an "On Throw" break point:

    enter image description here

    This will stop the debugger at the exact point the exception is thrown, and you get a better stack trace. It's a good idea to have an exception break point like this enabled all the time, although you will occasionally get internal exceptions from Apple code (e.g. when using QLPreviewController, MPMoviePlayerController).

    0 讨论(0)
  • 2020-12-02 09:55

    You should also consider using the NSSetUncaughtExceptionHandler. (You can save the crash log to the disk, check next startup if a new crash log was saved, attach it to an email, etc.)

    put this into your didFinishLaunchingWithOptions method:

    NSSetUncaughtExceptionHandler(&exceptionHandler);
    

    and implement your exception handler:

    void exceptionHandler(NSException *exception)
    {        
        NSLog(@"%@",[exception name]);
        NSLog(@"%@",[exception reason]);
        NSLog(@"%@",[exception userInfo]);
        NSLog(@"%@",[exception callStackSymbols]);
        NSLog(@"%@",[exception callStackReturnAddresses]);
    }
    
    0 讨论(0)
提交回复
热议问题