Objective-C 例外の出力方法

備忘録として、
try~catchで発生した例外の内容をログに出力する。

サンプル

```objc:Objective-C
@try {
    
    // Code to crash
    NSArray *hoge = [NSArray array];
    [hoge objectAtIndex:0];
    
} @catch (NSException *e) {
    NSLog(@"\n%@\n%@\n%@\n", e.name, e.reason, e.callStackSymbols);
}
```
ログ

```logs:Log
NSRangeException
*** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray
(
	0   CoreFoundation                      0x000000010ebf41ab __exceptionPreprocess + 171
	1   libobjc.A.dylib                     0x000000010e289f41 objc_exception_throw + 48
	2   CoreFoundation                      0x000000010ec0cf3d -[__NSArray0 objectAtIndex:] + 93
	3   HogeSampleTests                     0x0000000125ecbf98 -[HogeSampleTests testExample] + 88
	4   CoreFoundation                      0x000000010eb7849c __invoking___ + 140
	5   CoreFoundation                      0x000000010eb78370 -[NSInvocation invoke] + 320
	6   XCTest                              0x00000001242b9125 __24-[XCTestCase invokeTest]_block_invoke + 591
	7   XCTest                              0x0000000124301a52 -[XCUITestContext performInScope:] + 183
	8   XCTest                              0x00000001242b8ecb -[XCTestCase invokeTest] + 141
	9   XCTest                              0x00000001242b9e8c __26-[XCTestCase performTest:]_block_invoke.369 + 42
	10  XCTest                              0x00000001243067f9 +[XCTContext runInContextForTestCase:block:] + 163
	11  XCTest                              0x00000001242b9828 -[XCTestCase performTest:] + 608
	12  XCTest                              0x00000001242b582e __27-[XCTestSuite performTest:]_block_invoke + 363
	13  XCTest                              0x00000001242b5195 -[XCTestSuite _performProtectedSectionForTest:testSection:] + 26
	14  XCTest                              0x00000001242b5392 -[XCTestSuite performTest:] + 239
	15  XCTest                              0x00000001242b582e __27-[XCTestSuite performTest:]_block_invoke + 363
	16  XCTest                              0x00000001242b5195 -[XCTestSuite _performProtectedSectionForTest:testSection:] + 26
	17  XCTest                              0x00000001242b5392 -[XCTestSuite performTest:] + 239
	18  XCTest                              0x00000001242b582e __27-[XCTestSuite performTest:]_block_invoke + 363
	19  XCTest                              0x00000001242b5195 -[XCTestSuite _performProtectedSectionForTest:testSection:] + 26
	20  XCTest                              0x00000001242b5392 -[XCTestSuite performTest:] + 239
	21  XCTest                              0x000000012430df23 __44-[XCTTestRunSession runTestsAndReturnError:]_block_invoke + 40
	22  XCTest                              0x00000001242c8a0e -[XCTestObservationCenter _observeTestExecutionForBlock:] + 475
	23  XCTest                              0x000000012430ddc2 -[XCTTestRunSession runTestsAndReturnError:] + 281
	24  XCTest                              0x00000001242a4e87 -[XCTestDriver runTestsAndReturnError:] + 314
	25  XCTest                              0x0000000124305a64 _XCTestMain + 619
	26  CoreFoundation                      0x000000010eb9718c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
	27  CoreFoundation                      0x000000010eb7b96b __CFRunLoopDoBlocks + 203
	28  CoreFoundation                      0x000000010eb7b144 __CFRunLoopRun + 1300
	29  CoreFoundation                      0x000000010eb7a9b9 CFRunLoopRunSpecific + 409
	30  GraphicsServices                    0x0000000113ca59c6 GSEventRunModal + 62
	31  UIKit                               0x000000010f06f5e8 UIApplicationMain + 159
	32  HogeSample                          0x000000010d16d67f main + 111
	33  libdyld.dylib                       0x00000001114f2d81 start + 1
)
```