Asynchronous Call Stack Reconstruction via Continuation Segmentation

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Traditional synchronous call stacks are inadequate for debugging asynchronous programs, as they fail to accurately show the sequence of method invocations leading to the current execution point, which is crucial for developers to understand the causality of asynchronous operations.

Innovation Solution

The development of an asynchronous call stack technique that captures and preserves stack trace information at each continuation point, allowing for the reconstruction of the execution sequence by reading heap memory and task/promise libraries, enabling accurate identification of the current execution state and causality chain.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Measurement precision

If traditional synchronous call stacks are used in asynchronous programs, then the call stack structure remains simple and easy to implement, but the accuracy of showing execution sequence and causality is lost

Engineering Contradiction:
Improveaccuracy of execution sequenceVSAvoidcall stack structure
Core Design Contradiction:
Measurement precisionVSDevice complexity

Solution Approach 1:

The patent segments the call stack into multiple independent components: a stack trace segment captured at continuation scheduling, a continuation descriptor storing execution context, and a link to the parent continuation. This segmentation allows each component to serve its specific purpose while collectively providing accurate asynchronous execution sequencing without requiring a complete redesign of the entire call stack system.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

The patent performs preliminary action by capturing the stack trace segment and storing continuation information at the point where an asynchronous operation is scheduled (the continuation point). This preliminary capture preserves the execution context before the asynchronous operation completes, enabling accurate reconstruction of the execution sequence later during debugging or error reporting.

Inventive Principle:
Principle #10Preliminary action

2Loss of information

If stack trace information is stored at every continuation point, then accurate causality chain tracking is achieved, but memory usage and performance overhead increase

Engineering Contradiction:
Improvecausality informationVSAvoidmemory usage
Core Design Contradiction:
Loss of informationVSQuantity of substance

Solution Approach 1:

The patent extracts only the essential information needed for causality tracking at each continuation point: the stack trace segment up to the continuation, the continuation descriptor with execution context, and the link to the parent continuation. By taking out only these critical elements rather than storing complete execution histories, the system achieves accurate causality chain tracking while minimizing memory usage.

Inventive Principle:
Principle #2Taking out (Extraction)

Solution Approach 2:

The patent creates a copy of the relevant stack trace information and continuation context at each asynchronous continuation point. This copy is stored in a structured format that can be efficiently retrieved and reconstructed later. The copying approach preserves causality information without requiring permanent storage of entire execution traces, reducing memory requirements while maintaining information accuracy.

Inventive Principle:
Principle #26Copying

3Ease of operation

If traditional synchronous call stacks are used, then debugging tools can easily obtain call stack information, but the information does not accurately reflect asynchronous execution causality

Engineering Contradiction:
Improvedebugging tool operationVSAvoidexecution causality accuracy
Core Design Contradiction:
Ease of operationVSMeasurement precision

Solution Approach 1:

The patent introduces an intermediary structure consisting of continuation descriptors and stack trace segments that bridge the gap between traditional synchronous call stacks and asynchronous execution reality. This intermediary layer preserves the familiar call stack interface for debugging tools while accurately representing asynchronous execution causality through the structured storage and retrieval of continuation information.

Inventive Principle:
Principle #24Intermediary (Mediator)

Data Source

PatentEP2956862B1Call stacks for asynchronous programs
Publication Date: 2018.06.13 MICROSOFT TECHNOLOGY LICENSING LLC
  • EP2956862B1 patent drawingFigure 1
  • EP2956862B1 patent drawingFigure 2~3
  • EP2956862B1 patent drawingFigure 4

AI summary

Embodiments provide call stacks for asynchronous programing. A set of all asynchronous call stacks is found by first identifying all threads and all outstanding tasks that have not yet been completed. Optionally, all outstanding continuation-delegates or lambdas that are in the windows queue waiting to be scheduled and/or all outstanding delegates or lambdas in a language-specific queue are also identified. Next, for each thread, identify whether it was invoked by a continuation-callback and, if so, find the corresponding task/promise. Next, given a task/promise, identify the logical parent task/promise. Optionally, given a delegate or lambda, identify its logical parent task/promise. The sequence of logical tasks/promises constitutes an asynchronous call stack in a program. Further information may optionally be retrieved to make the asynchronous call stack more useful. Finally, given a task/promise, identify the corresponding line number and location in source code.