-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
Futures clobber exception stacks #2763
Comments
It's probably worth noting that this is on the VM. I haven't tested on Frog or dart2js. |
I've figured out a way around this, although I'm not sure how reliable it is. If you replace "catch (final e)" with "catch (Exception e)" in futures_implementation.dart, the correct stack trace is used. cc @sigmundch. |
Delving into this a little deeper, it seems my workaround is not functional. All it was doing was causing the exception to avoid the catch handler and hit the top level. While this did provide the correct stack trace, it also avoided all the Future exception-handling infrastructure. The fundamental problem here is that it's not possible to re-raise an exception with its original stack trace, so when Future encounters the call to "then" it can't do anything about its old stack. |
a7e448b2 pub upgrade --major-versions (#2784) 06bcff09 pub upgrade foo, only unlocks foo from pubspec.lock (#2781) aa20a4bd Usage exceptions no stacktrace (#2776) 14e12bf6 Clarify error message when spawning a subprocess fails (#2763) 5ef0a0e7 Added a pub upgrade --nullsafety mode (#2741) 9cde2406 Fix pub remove --dry-run (#2774) 7426be94 Remove hack now issue has been fixed (#2773) 90a1f776 Limit retries in test to avoid timeout (#2765) 3aa327c7 Stop depending on .packages (#2764) Change-Id: Ifd8a8402c4628e7278b6fedfd2ca7902004fa6e8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175241 Auto-Submit: Jonas Jensen <jonasfj@google.com> Reviewed-by: Sigurd Meldgaard <sigurdm@google.com> Commit-Queue: Sigurd Meldgaard <sigurdm@google.com>
This reverts commit 41381e9. Reason for revert: pub fails on startup if git is not installed; b/175080640 Original change's description: > Roll pub > > a7e448b2 pub upgrade --major-versions (#2784) > 06bcff09 pub upgrade foo, only unlocks foo from pubspec.lock (#2781) > aa20a4bd Usage exceptions no stacktrace (#2776) > 14e12bf6 Clarify error message when spawning a subprocess fails (#2763) > 5ef0a0e7 Added a pub upgrade --nullsafety mode (#2741) > 9cde2406 Fix pub remove --dry-run (#2774) > 7426be94 Remove hack now issue has been fixed (#2773) > 90a1f776 Limit retries in test to avoid timeout (#2765) > 3aa327c7 Stop depending on .packages (#2764) > > Change-Id: Ifd8a8402c4628e7278b6fedfd2ca7902004fa6e8 > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175241 > Auto-Submit: Jonas Jensen <jonasfj@google.com> > Reviewed-by: Sigurd Meldgaard <sigurdm@google.com> > Commit-Queue: Sigurd Meldgaard <sigurdm@google.com> TBR=sigurdm@google.com,jonasfj@google.com Change-Id: I29b20b4a2dc037146dd27c8fe6e6ecce6833e7b6 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175303 Reviewed-by: David Morgan <davidmorgan@google.com> Commit-Queue: David Morgan <davidmorgan@google.com>
This is a reland of 41381e9 Contains one more fix: 8ea96121d fix tryGitCommand Original change's description: > Roll pub > > a7e448b2 pub upgrade --major-versions (#2784) > 06bcff09 pub upgrade foo, only unlocks foo from pubspec.lock (#2781) > aa20a4bd Usage exceptions no stacktrace (#2776) > 14e12bf6 Clarify error message when spawning a subprocess fails (#2763) > 5ef0a0e7 Added a pub upgrade --nullsafety mode (#2741) > 9cde2406 Fix pub remove --dry-run (#2774) > 7426be94 Remove hack now issue has been fixed (#2773) > 90a1f776 Limit retries in test to avoid timeout (#2765) > 3aa327c7 Stop depending on .packages (#2764) > > Change-Id: Ifd8a8402c4628e7278b6fedfd2ca7902004fa6e8 > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175241 > Auto-Submit: Jonas Jensen <jonasfj@google.com> > Reviewed-by: Sigurd Meldgaard <sigurdm@google.com> > Commit-Queue: Sigurd Meldgaard <sigurdm@google.com> Change-Id: Id50e6eca0372860f7087882a5c67141def07031c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175309 Reviewed-by: Jonas Jensen <jonasfj@google.com> Commit-Queue: Sigurd Meldgaard <sigurdm@google.com>
Consider the following code:
main() {
new Future.immediate(null).chain(() {
throw 'error';
}).then(() {});
}
The trace and line information of the original exception is not reported. Instead, it's reported as being thrown from within the call to "then". This makes it extremely difficult to debug errors in asynchronous code that uses futures heavily, since it's impossible to tell where an exception was originally thrown.
The text was updated successfully, but these errors were encountered: