How to debug what's wrong if app crashes only in release mode

I upgraded Flutter to 2.0.0 recently and am stuck with this issue. flutter run and flutter run --profile work perfectly well, but flutter run --release makes app crash after startup. There is no stacktrace, there is no error or warning, there is no build issue or verbose warning, no hint really. I googled a lot, but similar questions were answered like "try to remove this line" or "try to add that line". I couldn't find any clear steps on how to debug what's wrong.

What steps should I take to debug this issue and find the root cause instead of trying meaningless changes on code hoping some of them will eventually fix the issue?


Solution 1:

Use adb logcat

OR

Enable debugging in release build, by modifying your android/app/build.gradle like this

buildTypes {
    release {
        debuggable true
        shrinkResources false
        minifyEnabled false
        ...
    }
}

Solution 2:

When the error is code related and not in flutter itself sentry should help.

Sentry's Flutter SDK enables automatic reporting of errors, messages, and exceptions.

You can import it just as any other package

dependencies:
  sentry_flutter: ^4.0.6

and configure it as early as possible in you app

import 'package:flutter/widgets.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

Future<void> main() async {
  await SentryFlutter.init(
    (options) => options.dsn = 'put_your_public_key_here',
    appRunner: () => runApp(MyApp()),
  );
}

To get your public key you just have to sign up on sentry.io and create a flutter project, no need to search for your key your it should be in the example code, it wont let you pass that point without initialiting it so you can't miss it. The docs regarding flutter can be found here.

Solution 3:

You can Use Firebase Analytics to see error logs from your released devices from firebase. Previously it was named as Fabric.

Or you can create your own log tracker, write the logs in a file and upload the log to your server.

You can give options to user to capture log and send to server within "Advanced Settings" or something like that.

Solution 4:

try this flutter run --release --no-shrink