  Dynamic program slicing can significantly reduce the code developers need to
inspect by narrowing it down to only a subset of relevant program statements.
However, despite an extensive body of research showing its usefulness, dynamic
slicing is still short from production-level use due to the high cost of
runtime instrumentation.
  As an alternative, we propose statistical program slicing, a novel hybrid
dynamic-static slicing technique that explores the trade-off between accuracy
and runtime cost. Our approach relies on modern hardware support for control
flow monitoring and a novel, cooperative heap memory tracing mechanism combined
with static program analysis for data flow tracking. We evaluate statistical
slicing for debugging on 21 failures from 6 widely deployed applications and
show it recovers 94% of the program statements on a dynamic slice with only 5%
overhead.
