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

Futures clobber exception stacks #2763

Closed
nex3 opened this issue Apr 26, 2012 · 3 comments
Closed

Futures clobber exception stacks #2763

nex3 opened this issue Apr 26, 2012 · 3 comments
Labels
area-core-library SDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries. closed-duplicate Closed in favor of an existing report

Comments

@nex3
Copy link
Member

nex3 commented Apr 26, 2012

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.

@nex3
Copy link
Member Author

nex3 commented Apr 26, 2012

It's probably worth noting that this is on the VM. I haven't tested on Frog or dart2js.

@nex3
Copy link
Member Author

nex3 commented May 1, 2012

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.

@nex3
Copy link
Member Author

nex3 commented Jul 3, 2012

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.


Added Duplicate label.
Marked as being merged into #3974.

@nex3 nex3 added Type-Defect area-core-library SDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries. closed-duplicate Closed in favor of an existing report labels Jul 3, 2012
dart-bot pushed a commit that referenced this issue Dec 7, 2020
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>
dart-bot pushed a commit that referenced this issue Dec 8, 2020
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>
dart-bot pushed a commit that referenced this issue Dec 9, 2020
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>
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-core-library SDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries. closed-duplicate Closed in favor of an existing report
Projects
None yet
Development

No branches or pull requests

1 participant