Closed vixez closed 3 years ago
@vixez thanks for reporting.
the minified:a6v is a limitation of the flutter tooling, the uploaded source maps looks correct, we will investigate the issue, thanks
@marandaneto Alright, thank you
I've asked for help from our Web team that works closely with source maps, will let you know asap.
could it be related to https://github.com/flutter/flutter/issues/87734 ?
@vixez what's the chance that the Flutter tooling generated an invalid/incomplete source maps file?
See this note:
Originally the source map spec had a very verbose output of all the mappings and resulted in the sourcemap being about 10 times the size of the generated code. Version two reduced that by around 50% and version three reduced it again by another 50%, so for a 133kB file you end up with a ~300kB source map.
the source map file should be way bigger, can you verify that? thanks
@vixez any news?
@marandaneto Hello, Sorry, I was on holidays, just got back today. I'll check asap.
@marandaneto Releasing our web version in profile mode is not an option, so I think we'll have to wait for a proper solution from the Flutter team to have better sourcemaps
@marandaneto Releasing our web version in profile mode is not an option, so I think we'll have to wait for a proper solution from the Flutter team to have better sourcemaps
indeed, but please have a look at https://github.com/getsentry/sentry-dart/issues/590#issuecomment-922859318 looks like the generated source maps are just invalid, have you tried to generate it again? maybe there was an issue during generation?
even if Flutter generates with a few missing things, the .map
file should be always bigger, and Sentry is able to symbolicate most of the things anyway, See https://github.com/getsentry/sentry-dart/issues/417#issuecomment-897480519
@marandaneto Yes I tried the generation several times.
First I tried it with a shell script after the build, and then switched to sentry_dart_plugin
. The results seem the same.
The manual build and upload was done like this:
Part of the buildspec.yml
:
- echo Building flutter code
- flutter pub get
- sh web_flavors/append-version.sh
- sh web_flavors/$FLAVOR_SCRIPT
- export SENTRY_RELEASE="get_driven_customer@$(echo $(cat pubspec.yaml) | sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,4\}[0-9][^.][0-9]*\).*/\1/p')"
- flutter build web --dart-define=SENTRY_RELEASE=$SENTRY_RELEASE -t lib/$FLAVOR_ENTRYPOINT --release --source-maps
- echo upload source maps to Sentry
- sh web_flavors/sentry_upload_source_maps.sh
sentry_upload_source_maps.sh
:
version=$(echo $(cat pubspec.yaml) | sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,4\}[0-9][^.][0-9]*\).*/\1/p')
curl -sL https://sentry.io/get-cli/ | bash
ls $PWD/build/web/main.dart.js.map
echo uploading source maps for $version
export SENTRY_ORG=<redacted>
export SENTRY_PROJECT=<redacted>
# see https://github.com/getsentry/sentry-flutter/blob/d22e8376648dd9746304646036dbd24bb885e177/example/run.sh#L24-L29
sentry-cli releases new "<redacted>@$version"
sentry-cli releases files "<redacted>@$version" upload-sourcemaps . --ext dart
sentry-cli releases files "<redacted>@$version" upload-sourcemaps . --ext map --ext js
sentry-cli releases finalize "<redacted>@$version"
sentry_dart_plugin
just calls sentry-cli
automatically for you, so as long as you are passing the same params, should not be any different.
you are still missing the --dist
param for upload-sourcemaps
which should match what is detected automatically by the SDK or if you've set it manually, eg, in your example issue https://sentry.io/share/issue/7f6dd60c052542418c2bfadc2e389c65/
the dist
is 98
similar issues https://github.com/getsentry/sentry-dart/issues/512 and https://github.com/getsentry/sentry-dart/issues/562
also the version should match, eg, in your example issue https://sentry.io/share/issue/7f6dd60c052542418c2bfadc2e389c65/ the release
is +98
with the dist included
@marandaneto
I built with:
flutter build web -t lib/main-customer_production_store.dart --release --source-maps
I tried updating the script like so:
version=$(echo $(cat pubspec.yaml) | sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,4\}[0-9][^.][0-9]*\).*/\1/p')
curl -sL https://sentry.io/get-cli/ | bash
ls $PWD/build/web/main.dart.js.map
dist=$(echo "$version" | awk -F "+" '{print $2}')
echo "uploading source maps for $version (dist: $dist)"
export SENTRY_ORG=<redacted>
export SENTRY_PROJECT=<redacted>
# see https://github.com/getsentry/sentry-flutter/blob/d22e8376648dd9746304646036dbd24bb885e177/example/run.sh#L24-L29
sentry-cli releases new "<redacted>@$version"
sentry-cli releases files "<redacted>@$version" upload-sourcemaps . --ext dart --dist $dist
sentry-cli releases files "<redacte>@$version" upload-sourcemaps . --ext map --ext js --dist $dist
sentry-cli releases finalize "<redacted>@$version"
With that it seems worse than the plugin, now everything seems minified. Example crash.
@vixez you cannot use .
for upload-sourcemaps
dir. (js and map only).
see https://github.com/getsentry/sentry-dart-plugin/blob/main/lib/src/configuration.dart#L77-L80
you have to use build/web
when doing sentry-cli releases
with <redacted>@$version
, it should follow the pattern as stated before, eg <redacted>@$version+$dist
, you have to pass the $dist and they should match
@marandaneto
I replaced .
with build/web
, so the script is now:
version=$(echo $(cat pubspec.yaml) | sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,4\}[0-9][^.][0-9]*\).*/\1/p')
curl -sL https://sentry.io/get-cli/ | bash
ls $PWD/build/web/main.dart.js.map
dist=$(echo "$version" | awk -F "+" '{print $2}')
echo "uploading source maps for $version (dist: $dist)"
export SENTRY_ORG=<redacted>
export SENTRY_PROJECT=<redacted>
# see https://github.com/getsentry/sentry-flutter/blob/d22e8376648dd9746304646036dbd24bb885e177/example/run.sh#L24-L29
sentry-cli releases new "<redacted>@$version"
sentry-cli releases files "<redacted>@$version" upload-sourcemaps "build/web" --ext dart --dist $dist
sentry-cli releases files "<redacted>@$version" upload-sourcemaps "build/web" --ext map --ext js --dist $dist
sentry-cli releases finalize "<redacted>@$version"
$version
already includes the dist. $dist
is without the version.
This can be seen in the logging
echo "uploading source maps for $version (dist: $dist)"
results in: uploading source maps for 3.0.0+105 (dist: 105)
This results in a crash like this one.
The classes and so seem correct, however the line numbers are wrong. The fake crash should be at line 94, not 1111. But still seems to be minified (like the title of the crash)
@vixez as stated here -> https://github.com/getsentry/sentry-dart/issues/590#issuecomment-927882033
you cannot use . for upload-sourcemaps dir.
(js and map only)
.
the command below should still use .
for the dir path (ext dart only).
sentry-cli releases files "
But still seems to be minified (like the title of the crash)
about that, I've answered on https://github.com/getsentry/sentry-dart/issues/590#issuecomment-921623234
the minified:a6v is a limitation of the flutter tooling
also under https://docs.sentry.io/platforms/flutter/troubleshooting/
Also, Issue's titles might be obfuscated as we rely on the runtimeType, but they may not be human-readable, See: Obfuscate Caveat
@marandaneto
Okay, I changed the .
version=$(echo $(cat pubspec.yaml) | sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,4\}[0-9][^.][0-9]*\).*/\1/p')
curl -sL https://sentry.io/get-cli/ | bash
ls $PWD/build/web/main.dart.js.map
dist=$(echo "$version" | awk -F "+" '{print $2}')
echo "uploading source maps for $version (dist: $dist)"
export SENTRY_ORG=<redacted>
export SENTRY_PROJECT=<redacted>
# see https://github.com/getsentry/sentry-flutter/blob/d22e8376648dd9746304646036dbd24bb885e177/example/run.sh#L24-L29
sentry-cli releases new "<redacted>@$version"
sentry-cli releases files "<redacted>@$version" upload-sourcemaps . --ext dart --dist $dist
sentry-cli releases files "<redacted>@$version" upload-sourcemaps "build/web" --ext map --ext js --dist $dist
sentry-cli releases finalize "<redacted>@$version"
It seems I looked wrong at the line numbers, the crash does show at line 94, so that is great!
../../../lib/screens/dashboard/views/mobile/dashboard_mobile_view.dart in _BaseButtonState.build.<anonymous function> at line 94:25
Here it looks like there is also source code shown, is this possible, or is this as good as it will get for now?
@vixez there's source code, hover the stack frames, the 2nd one (2nd line) is clickable/expandable, and its line 94, so seems to be working, right?
Ah, you are right. I totally missed that. Thanks for all your help, I will close this issue.
Platform:
IDE:
split-debug-info and obfuscate (Flutter Android or iOS) or CanvasKit (Flutter Web):
Platform installed with:
Output of the command
flutter doctor -v
below:A collapsible section with markdown
flutter doctor -v
[✓] Flutter (Channel stable, 2.5.0, on macOS 11.5.2 20G95 darwin-x64, locale en-GB) • Flutter version 2.5.0 at /Users/glennruysschaert/development/flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 4cc385b4b8 (9 days ago), 2021-09-07 23:01:49 -0700 • Engine revision f0826da7ef • Dart version 2.14.0 [✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2) • Android SDK at /Users/glennruysschaert/Library/Android/sdk • Platform android-30, build-tools 30.0.2 • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165) • All Android licenses accepted. [✓] Xcode - develop for iOS and macOS • Xcode at /Applications/Xcode.app/Contents/Developer • Xcode 12.5.1, Build version 12E507 • CocoaPods version 1.10.1 [✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [✓] Android Studio (version 2020.3) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165) [✓] VS Code (version 1.60.0) • VS Code at /Applications/Visual Studio Code.app/Contents • Flutter extension version 3.26.0 [✓] Connected device (2 available) • macOS (desktop) • macos • darwin-x64 • macOS 11.5.2 20G95 darwin-x64 • Chrome (web) • chrome • web-javascript • Google Chrome 93.0.4577.82 • No issues found!The version of the SDK (See pubspec.lock): 6.0.0
I have the following issue:
I am using sentry_dart_plugin to upload debug files to Sentry with the following settings:
When I trigger a test exception, it seems like the stack traces are still somewhat minified and are missing the source code. Example Sentry exception.
The build command for web is:
flutter build web -t lib/main-customer_production_store.dart --release --source-maps
And then
flutter packages pub run sentry_dart_plugin
There are 131 files uploaded for the release in Source Maps, and a lot of native files in Debug Files.
But the results are quite incomplete. Am I missing something to get full stack traces without minified code, and included sources?