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

Symbolicate unhandled promise rejections #41377

Merged
merged 1 commit into from
Nov 10, 2023

Commits on Nov 8, 2023

  1. Symbolicate unhandled promise rejections (#40914)

    Summary:
    For a very long time when a promise rejects without an attached catch we get this warning screen without a correct stack trace, only some internal calls to the RN internals.
    
    <img src="https://github.com/facebook/react-native/assets/1634213/75aa7615-ee3e-4229-80d6-1744130de6e5" width="200" />
    
    I created [an issue for discussion](react-native-community/discussions-and-proposals#718) in the react-native-community repo and we figured out it was only a matter of symbolication. While it cannot be done on release without external packages and source maps, at least while developing we can provide a symbolicated stack-trace so developers can better debug the source of rejected promise.
    
    I got the stack trace symbolicated and the correct code frame. I'm missing some help trying to display it in the warning view but at the very least I can now correctly show the line of the error and log the codeframe to the console.
    
    <!-- Help reviewers and the release process by writing your own changelog entry.
    
    Pick one each for the category and type tags:
    
    [GENERAL] [FIXED] - Show correct stack frame on unhandled promise rejections on development mode.
    
    For more details, see:
    https://reactnative.dev/contributing/changelogs-in-pull-requests
    
    Pull Request resolved: #40914
    
    Test Plan:
    I simply created a throwing function on a dummy app, and checked the output of the console and the warning view:
    
    ```ts
    import React from 'react';
    import {SafeAreaView, Text} from 'react-native';
    
    async function throwme() {
      throw new Error('UNHANDLED');
    }
    
    function App(): JSX.Element {
      throwme();
    
      return (
        <SafeAreaView>
          <Text>Throw test</Text>
        </SafeAreaView>
      );
    }
    
    export default App;
    ```
    
    Here is the output
    
    <img src="https://github.com/facebook/react-native/assets/1634213/2c100e4d-618e-4143-8d64-4095e8370f4f" width="200" />
    
    Edit: I got the warning window working properly:
    
    <img src="https://github.com/facebook/react-native/assets/1634213/f02a2568-da3e-4daa-8132-e05cbe591737" width="200" />
    
    Reviewed By: yungsters
    
    Differential Revision: D50324344
    
    Pulled By: javache
    
    fbshipit-source-id: 66850312d444cf1ae5333b493222ae0868d47056
    ospfranco authored and fortmarek committed Nov 8, 2023
    Configuration menu
    Copy the full SHA
    9d67fdb View commit details
    Browse the repository at this point in the history