Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash inside RNSentryModule#captureEvent on Android #353

Closed
2 of 5 tasks
mickamy opened this issue Feb 14, 2018 · 0 comments
Closed
2 of 5 tasks

Crash inside RNSentryModule#captureEvent on Android #353

mickamy opened this issue Feb 14, 2018 · 0 comments
Assignees

Comments

@mickamy
Copy link

mickamy commented Feb 14, 2018

OS:

  • Windows
  • MacOS
  • Linux

Platform:

  • iOS
  • Android

Output of node -v && npm -v && npm ls --prod --depth=0

$ node -v && npm -v && npm ls --prod --depth=0
v8.5.0
5.3.0
├── @ptomasroos/react-native-multi-slider@0.0.10 invalid
├── autobind-decorator@2.1.0
├── buffer@5.0.8
├── card-validator@4.1.1
├── date-fns@1.29.0
├── es6-error@4.0.2
├── geolib@2.0.24
├── hoist-non-react-statics@2.3.1
├── lodash@4.17.4
├── mobx@3.3.1
├── mobx-logger@0.6.0
├── mobx-persist@0.4.1
├── mobx-react@4.3.4
├── mobx-remotedev@0.2.8
├── mobx-utils@3.2.1
├── pseudomap@1.0.2
├── qs@6.5.1
├── UNMET PEER DEPENDENCY react@16.0.0-beta.5
├── react-native@0.49.5
├── react-native-adjust@4.11.7
├── react-native-animatable@1.2.4
├── react-native-barcode-scanner-google@1.4.2
├── react-native-calendars@1.9.2
├── react-native-camera@0.12.0
├── react-native-code-push@5.1.3-beta
├── react-native-datepicker@1.6.0
├── react-native-device-brightness@1.2.0
├── react-native-device-info@0.12.1
├── react-native-drawer-layout-polyfill@1.3.2
├── react-native-fast-image@2.2.4
├── react-native-fbsdk@0.7.0
├── react-native-fcm@10.0.3
├── react-native-firebase-analytics@4.0.1
├── react-native-geocoder@0.5.0
├── react-native-google-analytics-bridge@5.3.3
├── react-native-google-signin@0.11.0 invalid
├── react-native-i18n@2.0.9
├── react-native-keyboard-aware-scroll-view@0.4.1
├── react-native-looped-carousel@0.1.7 invalid
├── react-native-maps@0.17.1
├── react-native-material-dropdown@0.5.2 invalid
├── react-native-material-textfield@0.10.3 invalid
├── react-native-mixpanel@0.0.16 invalid
├── react-native-parsed-text@0.0.20 invalid
├── react-native-permissions@1.0.4 invalid
├── react-native-photo-view@1.5.2
├── react-native-platform-touchable@1.1.1
├── react-native-qrcode@0.2.6
├── react-native-root-siblings@2.1.1
├── react-native-sentry@0.32.1
├── react-native-step-indicator@0.0.7
├── react-native-tab-view@0.0.70
├── react-native-vector-icons@4.4.2
├── react-navigation@1.0.0-beta.19
├── rusha@0.8.6
├── shortid@2.2.8
├── sprintf-js@1.1.1
├── static-container@1.2.0
├── validator@9.1.1
└── yallist@3.0.2

npm ERR! peer dep missing: react@>=15.3.1, required by react-native-looped-carousel@0.1.7
npm ERR! peer dep missing: react@^0.13.0 || ^0.14.0 || ^15.0.0 || ^16.0.0, required by mobx-react@4.3.4
npm ERR! invalid: @ptomasroos/react-native-multi-slider@0.0.10 /Users/mikami/WA/mobile_app/node_modules/@ptomasroos/react-native-multi-slider
npm ERR! invalid: react-native-google-signin@0.11.0 /Users/mikami/WA/mobile_app/node_modules/react-native-google-signin
npm ERR! invalid: react-native-looped-carousel@0.1.7 /Users/mikami/WA/mobile_app/node_modules/react-native-looped-carousel
npm ERR! extraneous: lodash.isequal@4.5.0 /Users/mikami/WA/mobile_app/node_modules/lodash.isequal
npm ERR! invalid: react-native-material-dropdown@0.5.2 /Users/mikami/WA/mobile_app/node_modules/react-native-material-dropdown
npm ERR! invalid: react-native-material-textfield@0.10.2 /Users/mikami/WA/mobile_app/node_modules/react-native-material-dropdown/node_modules/react-native-material-textfield
npm ERR! extraneous: color@2.0.0 /Users/mikami/WA/mobile_app/node_modules/color
npm ERR! extraneous: react-native-material-buttons@0.5.0 /Users/mikami/WA/mobile_app/node_modules/react-native-material-buttons
npm ERR! extraneous: react-native-material-ripple@0.7.5 /Users/mikami/WA/mobile_app/node_modules/react-native-material-ripple
npm ERR! invalid: react-native-material-textfield@0.10.3 /Users/mikami/WA/mobile_app/node_modules/react-native-material-textfield
npm ERR! extraneous: color@2.0.0 /Users/mikami/WA/mobile_app/node_modules/color
npm ERR! invalid: react-native-mixpanel@0.0.16 /Users/mikami/WA/mobile_app/node_modules/react-native-mixpanel
npm ERR! invalid: react-native-parsed-text@0.0.20 /Users/mikami/WA/mobile_app/node_modules/react-native-parsed-text
npm ERR! invalid: react-native-permissions@1.0.4 /Users/mikami/WA/mobile_app/node_modules/react-native-permissions

Config:

Sentry.config('https://...@sentry.io/...', {
    deactivateStacktraceMerging: true, // disable stacktrace merging for it causes error somehow.
}).install()

I have following issue:

Some JS error causes NoSuchKeyException.
I don't know what is it like (sorry, I could not reproduce it).
Here's a Java stacktrace we have on Sentry.

com.facebook.react.bridge.NoSuchKeyException: couldn't find key value in dynamic object
    at com.facebook.react.bridge.ReadableNativeMap.getString(ReadableNativeMap.java)
    at io.sentry.RNSentryModule.captureEvent(RNSentryModule.java:251)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:363)
    at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:162)
    at com.facebook.react.bridge.queue.NativeRunnable.run(NativeRunnable.java)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
    at android.os.Looper.loop(Looper.java:180)
    at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:194)
    at java.lang.Thread.run(Thread.java:764)

screenshot_20180214-143539

Steps to reproduce:

  • Sorry, I don't know how to reproduce it.
  • I guess some JS error does not satisfy RN-sentry's assumptions.

Actual result:

From line 248 in RNModule.java, I rewrite to below.

        if (event.hasKey("exception")) {
            ReadableNativeArray exceptionValues = (ReadableNativeArray)event.getMap("exception").getArray("values");
            ReadableNativeMap exception = exceptionValues.getMap(0);
            ReadableNativeMap stacktrace = exception.getMap("stacktrace");
            if (exception.hasKey("type") && exception.hasKey("value") && stacktrace.hasKey("frames")) {
                addExceptionInterface(eventBuilder, exception.getString("type"), exception.getString("value"), stacktrace.getArray("frames"));
            } else {
                try {
                    Log.e("RNSentryDebug", "InvalidExceptionMap: event=" + MapUtil.toJSONObject(event).toString());
                    Log.e("RNSentryDebug", "InvalidExceptionMap: exception=" + exception);
                    Log.e("RNSentryDebug", "InvalidExceptionMap: stacktrace=" + stacktrace);
                } catch (JSONException e) {
                    Log.e("RNSentryDebug", "InvalidExceptionMap: event=" + event.toString());
                    Log.e("RNSentryDebug", "InvalidExceptionMap: exception=" + exception);
                    Log.e("RNSentryDebug", "InvalidExceptionMap: stacktrace=" + stacktrace);
                }
                throw new Error("hoge");
            }
        }

And I got...

02-14 15:26:21.191 21231 21323 E RNSentryDebug: InvalidExceptionMap: event={"project":"244252","type":"Unhandled Promise Rejection","platform":"javascript","event_id":"98280c2a9fdf4066bc6b943748a05505","request":{},"user":{},"timestamp":1.518589580831E9,"exception":{"values":[{"stacktrace":{"frames":[{"in_app":true,"function":"callFunctionReturnFlushedQueue","colno":32,"lineno":1876,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"flushedQueue","colno":20,"lineno":1897,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"__guard","colno":11,"lineno":2028,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":31,"lineno":1898,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"__callImmediates","colno":30,"lineno":2042,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"callImmediates","colno":31,"lineno":12893,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"_callImmediatesPass","colno":17,"lineno":12689,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"_callTimer","colno":15,"lineno":12653,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":24,"lineno":12759,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":25,"lineno":11528,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"tryCallOne","colno":14,"lineno":11442,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":40,"lineno":115799,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"ClientError","colno":116,"lineno":98855,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"ExtendableError","colno":23,"lineno":98603,"filename":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false"}]},"type":"ClientError"}]},"culprit":"app:\/\/\/index.bundle?platform=android&dev=true&minify=false","logger":"javascript","tags":{"environment":"development"},"extra":{"session:duration":10576}}
02-14 15:26:21.193 21231 21323 E RNSentryDebug: InvalidExceptionMap: exception={ NativeMap: {"stacktrace":{"frames":[{"in_app":true,"function":"callFunctionReturnFlushedQueue","colno":32,"lineno":1876,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"flushedQueue","colno":20,"lineno":1897,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"__guard","colno":11,"lineno":2028,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":31,"lineno":1898,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"__callImmediates","colno":30,"lineno":2042,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"callImmediates","colno":31,"lineno":12893,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"_callImmediatesPass","colno":17,"lineno":12689,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"_callTimer","colno":15,"lineno":12653,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":24,"lineno":12759,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":25,"lineno":11528,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"tryCallOne","colno":14,"lineno":11442,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":40,"lineno":115799,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"ClientError","colno":116,"lineno":98855,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"ExtendableError","colno":23,"lineno":98603,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"}]},"type":"ClientError"} }
02-14 15:26:21.193 21231 21323 E RNSentryDebug: InvalidExceptionMap: stacktrace={ NativeMap: {"frames":[{"in_app":true,"function":"callFunctionReturnFlushedQueue","colno":32,"lineno":1876,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"flushedQueue","colno":20,"lineno":1897,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"__guard","colno":11,"lineno":2028,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":31,"lineno":1898,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"__callImmediates","colno":30,"lineno":2042,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"callImmediates","colno":31,"lineno":12893,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"_callImmediatesPass","colno":17,"lineno":12689,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"_callTimer","colno":15,"lineno":12653,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":24,"lineno":12759,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":25,"lineno":11528,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"tryCallOne","colno":14,"lineno":11442,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"?","colno":40,"lineno":115799,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"ClientError","colno":116,"lineno":98855,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"},{"in_app":true,"function":"ExtendableError","colno":23,"lineno":98603,"filename":"app:///index.bundle?platform=android&dev=true&minify=false"}]} }

Expected result:

  • Error should be reported to Sentry successfully.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants