diff --git a/packages/metro-symbolicate/src/Symbolication.js b/packages/metro-symbolicate/src/Symbolication.js index 585c0055a0..21b985e9e0 100644 --- a/packages/metro-symbolicate/src/Symbolication.js +++ b/packages/metro-symbolicate/src/Symbolication.js @@ -165,7 +165,7 @@ class SymbolicationContext { // IOS: foo.js:57:foo, Android: bar.js:75:bar symbolicate(stackTrace: string): string { return stackTrace.replace( - /(?:([^@: \n(]+)(@|:))?(?:(?:([^@: \n(]+):)?(\d+):(\d+)|\[native code\])/g, + /(?:([^@: \n(]+)(@|:))?(?:(?:([^@: \n(]+):)?(\d+):(\d+)|\[native code\](?::\d+:\d+)?)/g, (match, func, delimiter, fileName, line, column) => { if (delimiter === ':' && func && !fileName) { fileName = func; @@ -694,10 +694,25 @@ class SingleMapSymbolicationContext extends SymbolicationContext (some message with no frame) +1 ??? 0x0 throws6 + 1 (thrower.min.js:1:161) +2 ??? 0x0 o + 1 (thrower.min.js:1:464) +3 ??? 0x0 ([native code]:0:0) +4 ??? 0x0 ([native code]:0:0) diff --git a/packages/metro-symbolicate/src/__tests__/__snapshots__/symbolicate-test.js.snap b/packages/metro-symbolicate/src/__tests__/__snapshots__/symbolicate-test.js.snap index e2b6639165..d2135b3829 100644 --- a/packages/metro-symbolicate/src/__tests__/__snapshots__/symbolicate-test.js.snap +++ b/packages/metro-symbolicate/src/__tests__/__snapshots__/symbolicate-test.js.snap @@ -216,6 +216,16 @@ Array [ ] `; +exports[`symbolicating a crash reporter stack trace with 0:0 native frames 1`] = ` +"Non-fatal Exception: JavaScriptError +0 ??? 0x0 (some message with no frame) +1 ??? 0x0 throws6 + 1 (thrower.js:18:null) +2 ??? 0x0 o + 1 (thrower.js:30:arguments) +3 ??? 0x0 (null:null:null) +4 ??? 0x0 (null:null:null) +" +`; + exports[`symbolicating a profiler map 1`] = ` "JS_0000_xxxxxxxxxxxxxxxxxxxxxx throws0::thrower.js:48:11 JS_0001_xxxxxxxxxxxxxxxxxxxxxx throws6::thrower.js:35:38 diff --git a/packages/metro-symbolicate/src/__tests__/symbolicate-test.js b/packages/metro-symbolicate/src/__tests__/symbolicate-test.js index 78989fe817..24e40c17d6 100644 --- a/packages/metro-symbolicate/src/__tests__/symbolicate-test.js +++ b/packages/metro-symbolicate/src/__tests__/symbolicate-test.js @@ -215,6 +215,11 @@ test('symbolicating a stack trace in Node format', async () => execute([TESTFILE_MAP], read('testfile.node.stack')), ).resolves.toMatchSnapshot()); +test('symbolicating a crash reporter stack trace with 0:0 native frames', async () => + await expect( + execute([TESTFILE_MAP], read('testfile.crashreporter.stack')), + ).resolves.toMatchSnapshot()); + test('symbolicating a single entry', async () => await expect(execute([TESTFILE_MAP, '1', '161'])).resolves.toEqual( 'thrower.js:18:null\n',