Skip to content

Commit 824858c

Browse files
javachefacebook-github-bot-5
authored andcommitted
Add convenience function for formatting NSError for reporting
Reviewed By: nicklockwood Differential Revision: D2620933 fb-gh-sync-id: c5c40b78b19f12c9a3b1564b1e21f1acb12309ab
1 parent 31b5b0a commit 824858c

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

React/Base/RCTAssert.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ RCT_EXTERN RCTFatalHandler RCTGetFatalHandler(void);
107107
*/
108108
RCT_EXTERN NSString *RCTCurrentThreadName(void);
109109

110+
/**
111+
* Helper to get generate exception message from NSError
112+
*/
113+
RCT_EXTERN NSString *RCTFormatError(NSString *message, NSArray *stacktrace, NSUInteger maxMessageLength);
114+
110115
/**
111116
* Convenience macro to assert which thread is currently running (DEBUG mode only)
112117
*/

React/Base/RCTAssert.m

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -124,22 +124,10 @@ void RCTFatal(NSError *error)
124124
if (fatalHandler) {
125125
fatalHandler(error);
126126
} else {
127-
const NSUInteger maxMessageLength = 75;
128-
NSString *message = [error localizedDescription];
129-
if (message.length > maxMessageLength) {
130-
message = [[message substringToIndex:maxMessageLength] stringByAppendingString:@"..."];
131-
}
132-
133-
NSMutableString *prettyStack = [NSMutableString stringWithString:@"\n"];
134-
if ([error.userInfo[RCTJSStackTraceKey] isKindOfClass:[NSArray class]]) {
135-
for (NSDictionary *frame in error.userInfo[RCTJSStackTraceKey]) {
136-
[prettyStack appendFormat:@"%@@%@:%@\n", frame[@"methodName"], frame[@"lineNumber"], frame[@"column"]];
137-
}
138-
}
139-
140127
#if DEBUG
141128
@try {
142129
#endif
130+
NSString *message = RCTFormatError([error localizedDescription], error.userInfo[RCTJSStackTraceKey], 75);
143131
[NSException raise:@"RCTFatalException" format:@"%@", message];
144132
#if DEBUG
145133
} @catch (NSException *e) {}
@@ -156,3 +144,20 @@ RCTFatalHandler RCTGetFatalHandler(void)
156144
{
157145
return RCTCurrentFatalHandler;
158146
}
147+
148+
NSString *RCTFormatError(NSString *message, NSArray *stackTrace, NSUInteger maxMessageLength)
149+
{
150+
if (maxMessageLength > 0 && message.length > maxMessageLength) {
151+
message = [[message substringToIndex:maxMessageLength] stringByAppendingString:@"..."];
152+
}
153+
154+
NSMutableString *prettyStack = [NSMutableString string];
155+
if (stackTrace) {
156+
[prettyStack appendString:@", stack:\n"];
157+
for (NSDictionary *frame in stackTrace) {
158+
[prettyStack appendFormat:@"%@@%@:%@\n", frame[@"methodName"], frame[@"lineNumber"], frame[@"column"]];
159+
}
160+
}
161+
162+
return [NSString stringWithFormat:@"Message: %@%@", message, prettyStack];
163+
}

0 commit comments

Comments
 (0)