semantics-aware trace analysis [pldi 2009]

73
Kevin Hoffman, Patrick Eugster, Suresh Jagannathan

Upload: kevin-hoffman

Post on 29-Nov-2014

3.549 views

Category:

Technology


0 download

DESCRIPTION

We present a novel dynamic program analysis that builds a semantic view of program executions. These views reflect program abstractions and aspects; however, views are not simply projections of execution traces, but are linked to each other to capture semantic interactions among abstractions at different levels of granularity in a scalable manner.We describe our approach in the context of Java and demonstrate its utility to improve regression analysis. We first formalize a subset of Java and a grammar for traces generated at program execution. We then introduce several types of views used to analyze regression bugs along with a novel, scalable technique for semantic differencing of traces from different versions of the same program. Benchmark results on large open-source Java programs demonstrate that semantic-aware trace differencing can identify precise and useful details about the underlying cause for a regression, even in programs that use reflection, multithreading, or dynamic code generation, features that typically confound other analysis techniques.

TRANSCRIPT

Page 1: Semantics-Aware Trace Analysis [PLDI 2009]

Kevin Hoffman, Patrick Eugster, Suresh Jagannathan

Page 2: Semantics-Aware Trace Analysis [PLDI 2009]

Roadmap

Motivation

Prior Approaches

Semantics-Aware Trace Analysis (SATA)

Applying SATA to Regression Analysis

Evaluation

Conclusions

Page 3: Semantics-Aware Trace Analysis [PLDI 2009]

Motivation

Apache XalanJ 2.4.1 works:java … xslt.Process -xsl case1.xsl -in test.xml

java … xslt.Process -xsl case2.xsl -in test.xml

java … xslt.Process -xsl case3.xsl -in test.xml

Upgrade to 2.5.1, now it‟s broken!java … xslt.Process -xsl case1.xsl -in test.xml

java … xslt.Process -xsl case2.xsl -in test.xml

java … xslt.Process -xsl case3.xsl -in test.xml

Page 4: Semantics-Aware Trace Analysis [PLDI 2009]

How to find the cause?

Manual inspection is hard

12 months of development from 2.4.1 to 2.5.1

79K new or changed lines of code

97 new features and bugfixes

Page 5: Semantics-Aware Trace Analysis [PLDI 2009]

How to find the cause?

Debugging is hard

Separation of cause and effect

○ e.g. in XalanJ, bug in XSLT compiler

Complex web of interacting components

Debugging requires in-depth domain-

specific knowledge (limited resource)

Page 6: Semantics-Aware Trace Analysis [PLDI 2009]

Roadmap

Motivation

Prior Approaches

Semantics-Aware Trace Analysis (SATA)

Applying SATA to Regression Analysis

Evaluation

Conclusions

Page 7: Semantics-Aware Trace Analysis [PLDI 2009]

Challenges: Static Analysis

Dynamically generated code

Advanced language features

Dynamic dispatch (e.g., Polymorphism)

Reflection

Advanced aspect-oriented language features

Page 8: Semantics-Aware Trace Analysis [PLDI 2009]

Challenges: Dynamic Analysis

Dynamic program slicing

Slices are still quite large (e.g. 1000s of events)

Control-flow similarity metrics

State-space exploration / refinement

Page 9: Semantics-Aware Trace Analysis [PLDI 2009]

Execution Indexing

Use structure/state of execution to compute

an „index‟ at each execution point

Find correlations between indices for

profiling, debugging, execution comparison

Page 10: Semantics-Aware Trace Analysis [PLDI 2009]

Roadmap

Motivation

Prior Approaches

Semantics-Aware Trace Analysis (SATA)

Applying SATA to Regression Analysis

Evaluation

Conclusions

Page 11: Semantics-Aware Trace Analysis [PLDI 2009]

Semantic Trace Views

Execution Trace

--> LOG-1.addMsg('Handling..')

...

<-- LOG-1.addMsg(..)

--> SP-1.setRequestType('text/html')

--> STR-1.equals('text/html')

<-- STR-1.equals(..) ret=true

--> NUM-1.new(32, 127)

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

<-- NUM-1.new(..)

set SP-1._binConv = NUM-1

...

--> LOG-1.addMsg('Set req..')

...

<-- LOG-1.addMsg(..)

<-- SP-1.setRequestType(..)

Organize execution traces into “views”

Page 12: Semantics-Aware Trace Analysis [PLDI 2009]

Semantic Trace Views

Execution Trace (Thread View)

--> LOG-1.addMsg('Handling..')

...

<-- LOG-1.addMsg(..)

--> SP-1.setRequestType('text/html')

--> STR-1.equals('text/html')

<-- STR-1.equals(..) ret=true

--> NUM-1.new(32, 127)

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

<-- NUM-1.new(..)

set SP-1._binConv = NUM-1

...

--> LOG-1.addMsg('Set req..')

...

<-- LOG-1.addMsg(..)

<-- SP-1.setRequestType(..)

Thread views based on thread ID

Page 13: Semantics-Aware Trace Analysis [PLDI 2009]

Semantic Trace Views

Execution Trace (and Thread View)

Method View for SP.setRequestType

--> STR-1.equals('text/html')

<-- STR-1.equals(..) ret=true

--> NUM-1.new(32, 127)

<-- NUM-1.new(..)

set SP-1._binConv = NUM-1

...

--> LOG-1.addMsg('Set req..')

<-- LOG-1.addMsg(..)

--> LOG-1.addMsg('Handling..')

...

<-- LOG-1.addMsg(..)

--> SP-1.setRequestType('text/html')

--> STR-1.equals('text/html')

<-- STR-1.equals(..) ret=true

--> NUM-1.new(32, 127)

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

<-- NUM-1.new(..)

set SP-1._binConv = NUM-1

...

--> LOG-1.addMsg('Set req..')

...

<-- LOG-1.addMsg(..)

<-- SP-1.setRequestType(..)

Method views based on top of call stack

Page 14: Semantics-Aware Trace Analysis [PLDI 2009]

Semantic Trace Views

Method views based on top of call stack

Execution Trace (and Thread View)

Method View for LOG.addMsg

...

...

--> LOG-1.addMsg('Handling..')

...

<-- LOG-1.addMsg(..)

--> SP-1.setRequestType('text/html')

--> STR-1.equals('text/html')

<-- STR-1.equals(..) ret=true

--> NUM-1.new(32, 127)

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

<-- NUM-1.new(..)

set SP-1._binConv = NUM-1

...

--> LOG-1.addMsg('Set req..')

...

<-- LOG-1.addMsg(..)

<-- SP-1.setRequestType(..)

Method View for NUM.new

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

Page 15: Semantics-Aware Trace Analysis [PLDI 2009]

Semantic Trace Views

Active object views based on top of call stack

Execution Trace (and Thread View)

Active Object View for LOG-1.addMsg

...

...

--> LOG-1.addMsg('Handling..')

...

<-- LOG-1.addMsg(..)

--> SP-1.setRequestType('text/html')

--> STR-1.equals('text/html')

<-- STR-1.equals(..) ret=true

--> NUM-1.new(32, 127)

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

<-- NUM-1.new(..)

set SP-1._binConv = NUM-1

...

--> LOG-1.addMsg('Set req..')

...

<-- LOG-1.addMsg(..)

<-- SP-1.setRequestType(..)

Active Object View for NUM-1.new

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

Page 16: Semantics-Aware Trace Analysis [PLDI 2009]

Semantic Trace Views

Target object views

Execution Trace (and Thread View)

Target Object View for LOG-1

--> LOG-1.addMsg('Handling..')

<-- LOG-1.addMsg(..)

--> LOG-1.addMsg('Set req..')

<-- LOG-1.addMsg(..)

--> LOG-1.addMsg('Handling..')

...

<-- LOG-1.addMsg(..)

--> SP-1.setRequestType('text/html')

--> STR-1.equals('text/html')

<-- STR-1.equals(..) ret=true

--> NUM-1.new(32, 127)

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

<-- NUM-1.new(..)

set SP-1._binConv = NUM-1

...

--> LOG-1.addMsg('Set req..')

...

<-- LOG-1.addMsg(..)

<-- SP-1.setRequestType(..)

Target Object View for NUM-1

--> NUM-1.new(32, 127)

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

<-- NUM-1.new(..)

Page 17: Semantics-Aware Trace Analysis [PLDI 2009]

Semantic Trace Views

Views are linked allowing for multilevel analysis

Execution Trace (and Thread View)

Target Object View for LOG-1

--> LOG-1.addMsg('Handling..')

<-- LOG-1.addMsg(..)

--> LOG-1.addMsg('Set req..')

<-- LOG-1.addMsg(..)

--> LOG-1.addMsg('Handling..')

...

<-- LOG-1.addMsg(..)

--> SP-1.setRequestType('text/html')

--> STR-1.equals('text/html')

<-- STR-1.equals(..) ret=true

--> NUM-1.new(32, 127)

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

<-- NUM-1.new(..)

set SP-1._binConv = NUM-1

...

--> LOG-1.addMsg('Set req..')

...

<-- LOG-1.addMsg(..)

<-- SP-1.setRequestType(..)

Target Object View for NUM-1

--> NUM-1.new(32, 127)

set NUM-1._minCharRange = 32

set NUM-1._maxCharRange = 127

<-- NUM-1.new(..)

Method View for SP.setRequestType

--> STR-1.equals('text/html')

<-- STR-1.equals(..) ret=true

--> NUM-1.new(32, 127)

<-- NUM-1.new(..)

set SP-1._binConv = NUM-1

...

--> LOG-1.addMsg('Set req..')

<-- LOG-1.addMsg(..)

Page 18: Semantics-Aware Trace Analysis [PLDI 2009]

Roadmap

Motivation

Prior Approaches

Semantics-Aware Trace Analysis (SATA)

Applying SATA to Regression Analysis

Evaluation

Conclusions

Page 19: Semantics-Aware Trace Analysis [PLDI 2009]

What if we just used diff?

Collect dynamic traces:2.4.1: sssdyntracer … xslt.Process -xsl case2.xsl -in test.xml

2.5.1: sssdyntracer … xslt.Process -xsl case2.xsl -in test.xml

Traces are about 48K entries

Page 20: Semantics-Aware Trace Analysis [PLDI 2009]

What if we just used diff?

Collect dynamic traces:2.4.1: sssdyntracer … xslt.Process -xsl case2.xsl -in test.xml

2.5.1: sssdyntracer … xslt.Process -xsl case2.xsl -in test.xml

Traces are about 48K entries

Run “diff” tool on traces:

Requires 25 minutes on a 1.8GHZ x64 CPU

Requires 27 GB of RAM

Produces 1594 differences (3.3% of trace)

Page 21: Semantics-Aware Trace Analysis [PLDI 2009]

Challenges of diff / LCS

Old:

New:

diff based on LCS algorithm:

Intractable on large traces: Ω(n2)

Can‟t detect moved sequences

Is not semantic-aware

diff produces too many differences

Page 22: Semantics-Aware Trace Analysis [PLDI 2009]

Leveraging Semantic Views

Use secondary views (method/object) to

find correlations in primary view (thread)

Robust against reorderings in other views

Correlations are semantically sound

Apply LCS/diff over fixed-sized

windows in primary view to find „best

overall correlation‟ in primary view

Page 23: Semantics-Aware Trace Analysis [PLDI 2009]

Recall: What LCS would produce

Old:

New:

Page 24: Semantics-Aware Trace Analysis [PLDI 2009]

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

Old:

New:

Main View

Page 25: Semantics-Aware Trace Analysis [PLDI 2009]

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Old:

New:

Main View

Secondary View

View construction

(only one of many

secondary views

displayed here)

Page 26: Semantics-Aware Trace Analysis [PLDI 2009]

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Old:

New:

Main View

Secondary View

Lock-step scanning

of main view

Page 27: Semantics-Aware Trace Analysis [PLDI 2009]

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Old:

New:

Main View

Secondary View

Lock-step scanning

of main view

Page 28: Semantics-Aware Trace Analysis [PLDI 2009]

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

View-based Semantic Differencing

Old:

New:

Main View

Secondary View

Discovery of

correlating

secondary views

Page 29: Semantics-Aware Trace Analysis [PLDI 2009]

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Old:

New:

Main View

Secondary View

Exploration of

correlating

secondary views

Page 30: Semantics-Aware Trace Analysis [PLDI 2009]

Secondary View

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Old:

New:

Main View

Exploration of

correlating

secondary views

Page 31: Semantics-Aware Trace Analysis [PLDI 2009]

Secondary View

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Old:

New:

Main View

Exploration of

correlating

secondary views

Page 32: Semantics-Aware Trace Analysis [PLDI 2009]

Secondary View

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Old:

New:

Main View

Exploration of

correlating

secondary views

Page 33: Semantics-Aware Trace Analysis [PLDI 2009]

Secondary View

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Old:

New:

Main View

Exploration of

correlating

secondary views

Page 34: Semantics-Aware Trace Analysis [PLDI 2009]

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Secondary View

View-based Semantic Differencing

Old:

New:

Main View

Lock-step scanning

of main view

Page 35: Semantics-Aware Trace Analysis [PLDI 2009]

Secondary View

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Old:

New:

Main View

Lock-step scanning

of main view

Page 36: Semantics-Aware Trace Analysis [PLDI 2009]

Secondary View

View-based Semantic Differencing

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Old:

New:

Main View

Lock-step scanning

of main view;

exploration of

secondary views

Page 37: Semantics-Aware Trace Analysis [PLDI 2009]

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Secondary View

View-based Semantic Differencing

Old:

New:

Main View

Apply LCS over

fixed-size window in

main view to find the

next correlation

Page 38: Semantics-Aware Trace Analysis [PLDI 2009]

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Secondary View

View-based Semantic Differencing

Old:

New:

Main View

Apply LCS over

fixed-size window in

main view to find the

next correlation

Page 39: Semantics-Aware Trace Analysis [PLDI 2009]

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Secondary View

View-based Semantic Differencing

Old:

New:

Main View

Lock-step scanning

of main view

Page 40: Semantics-Aware Trace Analysis [PLDI 2009]

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Secondary View

View-based Semantic Differencing

Old:

New:

Main View

Lock-step scanning

of main view

Page 41: Semantics-Aware Trace Analysis [PLDI 2009]

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Secondary View

View-based Semantic Differencing

Old:

New:

Main View

Lock-step scanning

of main view

Page 42: Semantics-Aware Trace Analysis [PLDI 2009]

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Secondary View

View-based Semantic Differencing

Old:

New:

Main View

Apply LCS over

fixed-size window in

main view to find the

next correlation

Page 43: Semantics-Aware Trace Analysis [PLDI 2009]

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Secondary View

View-based Semantic Differencing

Old:

New:

Main View

Lock-step scanning

of main view

Page 44: Semantics-Aware Trace Analysis [PLDI 2009]

C B D H X Y F E F Z

C A D F E F X Y Z

H X Y Z

D X Y Z

D

Secondary View

View-based Semantic Differencing

Old:

New:

Main View

View-based

differencing

identified moved

sequences properly

Page 45: Semantics-Aware Trace Analysis [PLDI 2009]

View-Based Differencing vs. LCS

Collect dynamic traces:2.4.1: sssdyntracer … xslt.Process -xsl case2.xsl -in test.xml

2.5.1: sssdyntracer … xslt.Process -xsl case2.xsl -in test.xml

Traces are about 48K entries

Run view-based differencing tool on traces:

Requires 0.3 minutes instead of 25 minutes

Requires 0.1 GB instead of 27 GB of RAM

Produces 598 differences (1.2% of trace)

○ vs 1594 differences (3.3% of trace) for LCS

Page 46: Semantics-Aware Trace Analysis [PLDI 2009]

Regression Analysis Process

Old Program

New Program

AspectJ

Load-time

Weaver

Tracing Aspects

Old Program w/

Instrumentation

New Program w/

Instrumentation

Trace

Regressing

Test Case

Trace

Working

Test Case(s)

(but similar)

Traces for 4

Cases

View Trace

Differencing

Likely

Regression

Causes

RPrism Analysis Algorithm

Page 47: Semantics-Aware Trace Analysis [PLDI 2009]

RPrism Analysis Algorithm

Old Program

Regressing Test Case

New Program

Regressing Test CaseVS

Suspected differences set:

Old Program

Working Test Case

New Program

Working Test CaseVS

Expected differences set:

New Program

Working Test Case

New Program

Regressing Test CaseVS

Regression differences set:

Page 48: Semantics-Aware Trace Analysis [PLDI 2009]

RPrism Analysis Algorithm

Suspected

differences setExpected

differences set

Regression

differences setResults

Page 49: Semantics-Aware Trace Analysis [PLDI 2009]

Roadmap

Motivation

Prior Approaches

Semantics-Aware Trace Analysis (SATA)

Applying SATA to Regression Analysis

Evaluation

Conclusions

Page 50: Semantics-Aware Trace Analysis [PLDI 2009]

4 Regressions on 3 Projects

Daikon Dynamic invariant detector from MIT

Used as a test subject in 11 other publications

Apache XalanJ Implements XML XPath and XSLT

Interprets XSLT or compiles XSLT to Java bytecode

Used in Sun JDK to implement javax.xml.* classes

Apache Derby (720 KLOC) Embedded or client/server relational DB

AKA Sun Java DB, included in JDK 6

Page 51: Semantics-Aware Trace Analysis [PLDI 2009]

Daikon Regression

About Daikon

169 KLOC, 1100 classes

Dynamic invariant detector from MIT

Used as a test subject in 11 other publications

About the Regression

Regression first studied by JUnit/CIA [FSE „06]

○ 1 week of differences

Execution traces about 15K entries in length

Page 52: Semantics-Aware Trace Analysis [PLDI 2009]

Daikon Regression

42 differences before, 3 after analysis

Same accuracy as LCS

12.9x speedup

12.1 times less memory

Page 53: Semantics-Aware Trace Analysis [PLDI 2009]

XalanJ-1725 Regression

About XalanJ

365 KLOC, 1500 classes

Implements XPath and XSLT for XML

Used by Sun to implement javax.xml.* classes

About the Regression

Regression from version 2.5.1 to 2.5.2

○ 4 months of code changes, 84 major changes

Execution traces about 98K entries in length

Regressing behavior exhibited within dynamically generated code

Page 54: Semantics-Aware Trace Analysis [PLDI 2009]

XalanJ-1725 Regression

296 differences before, 1 after analysis

LCS failed to find the regression cause

82.8x speedup

269 times less memory

Page 55: Semantics-Aware Trace Analysis [PLDI 2009]

XalanJ-1802 Regression

About XalanJ 365 KLOC, 1500 classes

Implements XPath and XSLT for XML

Used by Sun to implement javax.xml.* classes

About the Regression Regression from version 2.4.1 to 2.5.1

○ 79K changed code over 12 months

○ 97 bugfixes and feature enhancements

Execution traces about 44K entries in length

Regressing behavior exhibited within a completely rearchitected module

Page 56: Semantics-Aware Trace Analysis [PLDI 2009]

XalanJ-1802 Regression

184 differences before, 10 after analysis

Same accuracy as LCS

9.4x speedup

35.4 times less memory

Page 57: Semantics-Aware Trace Analysis [PLDI 2009]

Derby-1633 Regression

About Derby

720K lines of code

Embedded or client/server relational DB

AKA Sun Java DB, included in JDK 6

About the Regression

Regression from version 10.1.2.1 to 10.1.3.1

○ 7 months of changes, 9 enhancements, 97 bugfixes

Execution traces about 335K entries in length

Involves multiple threads, larger code base (2x), and longer running traces (3x)

Page 58: Semantics-Aware Trace Analysis [PLDI 2009]

Derby-1633 Regression

2663 differences before, 6 after analysis

LCS completely failed (out of memory

failure at 32 GB)

Page 59: Semantics-Aware Trace Analysis [PLDI 2009]

Roadmap

Motivation

Prior Approaches

Semantics-Aware Trace Analysis (SATA)

Applying SATA to Regression Analysis

Evaluation

Conclusions

Page 60: Semantics-Aware Trace Analysis [PLDI 2009]

Summary / Future Directions

New view-based model for traces

Facilitates semantics-aware dynamic analyses

One application is efficient trace differencing

Full formal framework in paper

Other potential applications:

Race detection

Object-protocol enforcement

Data-mining from traces

Malware detection

Page 61: Semantics-Aware Trace Analysis [PLDI 2009]

Download RPrism, try it out!

http://cs.purdue.edu/homes/kjhoffma/rprism/

Contact Information:

Kevin Hoffman

[email protected]

Page 62: Semantics-Aware Trace Analysis [PLDI 2009]

View-based Diff vs LCS

Page 63: Semantics-Aware Trace Analysis [PLDI 2009]

Regression Cause Analysis

Factors affecting false negatives: Dynamic traces are complete, set A must contain cause

Differences in set B produced correct output, not likely to

contain the direct regression cause

Intersecting with set C can introduce false negatives (e.g.,

regression caused by code removal)

Factors affecting false positives: Choice of similar test case affects quality of set B

Intersecting/subtracting set C also helps

Set A is the suspected differences set

Set B is the expected differences set

Set C is the regression differences set

Page 64: Semantics-Aware Trace Analysis [PLDI 2009]
Page 65: Semantics-Aware Trace Analysis [PLDI 2009]
Page 66: Semantics-Aware Trace Analysis [PLDI 2009]

Lock-step Scanning of Main View

Page 67: Semantics-Aware Trace Analysis [PLDI 2009]

Lock-step Scanning of Main View

Page 68: Semantics-Aware Trace Analysis [PLDI 2009]

Exploration of Secondary Views with LCS

Page 69: Semantics-Aware Trace Analysis [PLDI 2009]
Page 70: Semantics-Aware Trace Analysis [PLDI 2009]

Apply LCS over Fixed-size Window in

Main View to Find the Next Correlation

Page 71: Semantics-Aware Trace Analysis [PLDI 2009]

Exploration of Secondary Views with LCS

Page 72: Semantics-Aware Trace Analysis [PLDI 2009]

Apply LCS over Fixed-size Window in

Main View to Find the Next Correlation

Page 73: Semantics-Aware Trace Analysis [PLDI 2009]

Lock-step Scanning of Main View