堆栈跟踪方法名称已编辑 [英] Stack trace method names redacted
问题描述
当我的应用在他们的设备上崩溃时,我让用户通过电子邮件向我发送堆栈跟踪信息。在iOS 6之前,它们看起来像这样:
I have users email me stack traces when my app crashes on their device. Prior to iOS 6 they looked like this:
CRASH: NSInvalidArgumentException (*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil)
TRACE: (
0 CoreFoundation 0x355e58a7 __exceptionPreprocess + 186
1 libobjc.A.dylib 0x3798c259 objc_exception_throw + 32
2 CoreFoundation 0x3553a1d7 -[__NSArrayM insertObject:atIndex:] + 186
3 MYAPP 0x0006c0f7 MYAPP + 188663
4 MYAPP 0x000652a3 MYAPP + 160419
5 Foundation 0x3512ac29 __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke_0 + 16
6 Foundation 0x350826d9 -[NSURLConnectionInternalConnection invokeForDelegate:] + 28
7 Foundation 0x350826a3 -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 198
8 Foundation 0x350825c5 -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 60
9 CFNetwork 0x34de77f5 _ZN19URLConnectionClient23_clientDidFinishLoadingEPNS_26ClientConnectionEventQueueE + 192
10 CFNetwork 0x34ddc4a5 _ZN19URLConnectionClient26ClientConnectionEventQueue33processAllEventsAndConsumePayloadEP20XConnectionEventInfoI12XClientEvent18XClientEventParamsEl + 424
11 CFNetwork 0x34ddc1a3 _ZN19URLConnectionClient13processEventsEv + 106
12 CFNetwork 0x34ddc0d9 _ZN17MultiplexerSource7performEv + 156
13 CoreFoundation 0x355b9ad3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
14 CoreFoundation 0x355b929f __CFRunLoopDoSources0 + 214
15 CoreFoundation 0x355b8045 __CFRunLoopRun + 652
16 CoreFoundation 0x3553b4a5 CFRunLoopRunSpecific + 300
17 CoreFoundation 0x3553b36d CFRunLoopRunInMode + 104
18 GraphicsServices 0x371d7439 GSEventRunModal + 136
19 UIKit 0x33047cd5 UIApplicationMain + 1080
20 MYAPP 0x0003fbcf MYAPP + 7119
21 MYAPP 0x0003fb84 MYAPP + 7044
)
从CoreFoundation等方法名称并询问用户发生了什么,我可以很好地了解发生崩溃的位置。
From the CoreFoundation etc method names and asking the user what happened, I can get a pretty good idea of where the crash happened.
但是,自从iOS 6发布以来,我的崩溃报告看起来都像这样:
However, since iOS 6 was released, my crash reports all look like this:
CRASH: NSRangeException (*** -[__NSArrayI objectAtIndex:]: index 2147483670 beyond bounds [0 .. 11])
TRACE: (
0 CoreFoundation 0x3a3872bb <redacted> + 186
1 libobjc.A.dylib 0x32ca697f objc_exception_throw + 30
2 CoreFoundation 0x3a2d1e8d <redacted> + 164
3 MYAPP 0x000ff721 MYAPP + 214817
4 MYAPP 0x000e8999 MYAPP + 121241
5 UIKit 0x372f60ad <redacted> + 72
6 UIKit 0x372f605f <redacted> + 30
7 UIKit 0x372f603d <redacted> + 44
8 UIKit 0x372f58f3 <redacted> + 502
9 UIKit 0x372e1287 <redacted> + 526
10 UIKit 0x37373f3d <redacted> + 748
11 UIKit 0x3721e52b <redacted> + 318
12 UIKit 0x3720b809 <redacted> + 380
13 UIKit 0x3720b123 <redacted> + 6154
14 GraphicsServices 0x362085a3 <redacted> + 590
15 GraphicsServices 0x362081d3 <redacted> + 34
16 CoreFoundation 0x3a35c173 <redacted> + 34
17 CoreFoundation 0x3a35c117 <redacted> + 138
18 CoreFoundation 0x3a35af99 <redacted> + 1384
19 CoreFoundation 0x3a2cdebd CFRunLoopRunSpecific + 356
20 CoreFoundation 0x3a2cdd49 CFRunLoopRunInMode + 104
21 GraphicsServices 0x362072eb GSEventRunModal + 74
22 UIKit 0x3725f301 UIApplicationMain + 1120
23 MYAPP 0x000ccbd3 MYAPP + 7123
24 MYAPP 0x000ccb88 MYAPP + 7048
)
我得到了堆栈跟踪来自此处,重新打开应用程序时会提示用户发送电子邮件:
I get the stack trace from here, which the user is prompted to email when the app is re-opened:
void uncaughtExceptionHandler(NSException *exception) {
//make a file name to write the data to using the documents directory:
NSString *fileName = [NSString stringWithFormat:@"%@/crashlog.txt", documentsDirectory];
//create content - four lines of text
NSString *content = [NSString stringWithFormat:@"CRASH: %@ (%@)\n\nTRACE: %@", [exception name], [exception reason], [exception callStackSymbols]];
//save content to the documents directory
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];
}
如果没有方法名称,这比无用更糟糕。有没有办法让这些方法名称重新进入我的堆栈跟踪?这是一个发布配置,而不是调试。
Without the method names, this is worse than useless. Is there any way of getting these method names back into my stack traces? This is a release configuration, not debug.
编辑:
我有按照此答案中的说明进行操作。
I have followed the instructions in this answer.
我正在提取来自 .xcarchive
包的 .app
和 .dSYM
文件并运行 atos -arch armv7 -o'myApp.app'/'MyApp'
I am extracting the .app
and .dSYM
files from the .xcarchive
package and running atos -arch armv7 -o 'MyApp.app'/'MyApp'
然而,我仍然没有从 atos
获取方法名称。
However, I am still not getting method names from atos
.
推荐答案
你有iOS吗?偶然安装了6个贝塔?我遇到了同样的问题。
Do you have any iOS 6 betas installed, by chance? I ran into this same problem.
这问题帮助了我。
这篇关于堆栈跟踪方法名称已编辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!